C# 利用dt.Compute计算表达式的值
代码的功能是计算表达式。
比如
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
版权声明:本文为博主原创文章,转载请附上博文链接!