当前位置:首页 > C#编程 > C#/.net框架 > 正文内容

C# 利用dt.Compute计算表达式的值

Jorge2年前 (2022-05-09)C#/.net框架578

 

代码的功能是计算表达式。

比如

true and false and true


使用的是dataset里面的dt.Compute函数。

也是在网上看到还有这种用法。

这样计算表达式的值就不用自己写算法了。

C#
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

版权声明:本文为博主原创文章,转载请附上博文链接!

扫描二维码推送至手机访问。

版权声明:本文由7点博客发布,如需转载请注明出处。

本文链接:http://6dot.cn/?id=93

标签: .NET.NET框架
分享给朋友:

“C# 利用dt.Compute计算表达式的值” 的相关文章

C#的变迁史 - C# 4.0 之线程安全集合篇

C#的变迁史 - C# 4.0 之线程安全集合篇

作为多线程和并行计算不得不考虑的问题就是临界资源的访问问题,解决临界资源的访问通常是加锁或者是使用信号量,这个大家应该很熟悉了。  而集合作为一种重要的临界资源,通用性更广,为了让大家更安全的使用它们,微软为我们带来了强大的并行集合:System.Collections.Concurrent里面的各...

C# tableLayoutPanel动态加载控件闪烁的解决方案

C# tableLayoutPanel动态加载控件闪烁的解决方案

WinForm加载多个自定义控件时,会出现很严重的闪烁问题,很卡,一块一块的加载(像打开网页时,网络很卡的那种感觉)简直没法忍受。在网上搜索了好久,网上大部分的方法是一下4种,但是都不能有效的解决问题。  1.将DoubleBuffered 设置 true,用双缓存处理Form界面内容加载,可以提高...

C#测量程序运行时间及cpu使用时间

C#测量程序运行时间及cpu使用时间

对一个服务器程序想统计每秒可以处理多少数据包,要如何做?答案是用处理数据包的总数,除以累记处理数据包用的时间。这里要指出的是, 运行一段程序,使用的cpu时间,跟实际运行的时间是不一样的。附例如下:C#private void ShowRunTime() {...

C# 当前不会命中断点 还没有为该文档加载任何符号

C# 当前不会命中断点 还没有为该文档加载任何符号

这个问题网上的经验大概如下:1。 清空方案,重新编译2。 删除项目bin目录下的东西,重新编译3。 解决相互引用的问题。4。 确保不是run的release5。把项目编译改为x866。 好像没发现其它的了。。。这些解决不了我们手上的项目的问题。我们的工程有几十个项目。我长话短说,解决方法是:引导项目...

c#——表达式树在LINQ动态查询

c#——表达式树在LINQ动态查询

一般如果逻辑比较简单,只是存在有的情况多一个查询条件,有的情况不需要添加该查询条件简单方式这样操作就可以了C#public IQueryable<FileImport> DynamicChainedSyntax (IQueryable<FileImport&g...

.NET(C#) TPL:Task中未觉察异常和TaskScheduler.UnobservedTaskException事件

.NET(C#) TPL:Task中未觉察异常和TaskScheduler.UnobservedTaskException事件

当你在一个Task执行中抛出异常,比如:C#Task.Factory.StartNew(() =>{    throw new Exception();});运行该方法,没有任何异常抛出。事实上此时Task的异常处于未觉察状...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。