代码的功能是计算表达式。
比如
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,转载请注明出处!讨论可扫码加群:



少有人走的路

















