代码的功能是计算表达式。
比如
true and false and true
使用的是dataset里面的dt.Compute函数。
也是在网上看到还有这种用法。
这样计算表达式的值就不用自己写算法了。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public enum MotionFlowItemLogicSymbolEnum { no = 0, and, or } private void button1_Click(object sender, EventArgs e) { Queue<bool> operationData = new Queue<bool>(); Queue<MotionFlowItemLogicSymbolEnum> operationSymbol = new Queue<MotionFlowItemLogicSymbolEnum>(); //IO,a,低电平,与 //IO,b,低电平,无 operationData.Enqueue(true); operationData.Enqueue(false); operationData.Enqueue(true); operationSymbol.Enqueue(MotionFlowItemLogicSymbolEnum.and); operationSymbol.Enqueue(MotionFlowItemLogicSymbolEnum.or); bool res = false; var dt = new DataTable(); var list1 = new List<bool>(); try { if (operationData.Count == 1) { res = operationData.Dequeue(); return; } while (true) { if (operationData.Count < 1) { if (list1.Count > 0) { throw new ArgumentException("运算数据数量不对!"); } break; } list1.Add(operationData.Dequeue()); if (list1.Count == 2) { if (operationSymbol.Count < 1) { throw new ArgumentException("逻辑运算符数量不对!"); } res = (bool)dt.Compute($"{list1[0].ToString()} {operationSymbol.Dequeue().ToString()} {list1[1].ToString()}", ""); list1.Clear(); if (operationData.Count > 0) { list1.Add(res); } } } MessageBox.Show(res.ToString()); } catch(Exception ex) { MessageBox.Show(ex.Message); } } } }
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


