2018年末记一些比较有用又怕忘记的代码吧

2018年剩明天一个工作日了,感觉今年做了很多东西,又感觉没做什么东西,主要指工作上。

很多个系统做着做着因为需求太复杂了,做不下去不想做了,人手不够真的好难自己一个人开发一个复杂的系统,也没啥时间在前端方面深入学习。

做一个计算绩效的系统,开始不知道怎么做,把数据库设计得很复杂,通用性又好差,很多奇怪的指标都实现不了。半年后知道了一个库DynamicExpresso,可以动态执行c#代码返回结果,如果绩效系统能用上这个就能支持好多绩效的指标了,于是就想重构这个系统了,可是最近需求比较急又没时间去重构,只好在旧系统上先改一下。

使用DynamicExpresso具体代码就是这样:

var dict = new Dictionary<string, decimal>();
dict.Add("a", 2.0m);
dict.Add("b", 0.3m);
dict.Add("c", 0.05m);
var formula = "0.2>=dict[\"b\"]?dict[\"a\"]*dict[\"c\"]:33";
var target = new Interpreter();
target=target.SetVariable("dict", dict);
var result = target.Eval<decimal>(formula);
C#

可是执行的时候又报错了:没有为类型“System.Double”和“System.Decimal”定义二进制运算符 GreaterThanOrEqual。

开始没读懂什么意思,百度又百度不到。

后来发现可以添加这段代码把错误提示显示成英文:

if (Debugger.IsAttached)
    CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.GetCultureInfo("en-US");
C#

这样显示的错误就是:The binary operator GreaterThanOrEqual is not defined for the types ‘System.Double’ and ‘System.Decimal’.

英文的错误就比较好搜索到解决方案了,原来是我的表达式中的“0.2>=dict[“b”]”里面的“>= ”左边是Double类型,右边是Decimal类型,执行时没有自动转换类型,所以就报错了改成这样就能执行通过了:

var formula = "0.2m>=dict[\"b\"]?dict[\"a\"]*dict[\"c\"]:33";
C#

就是把0.2定义成Decimal类型,这样就可以使用“>=”进行运算了。

把错误信息用英文显示这句代码真的很有用,怕不记得就写篇日志记一下,以后可能还用得到。

好久没上博客写日志了,也没什么好写的,希望2019年生活越来越好,身体越来越健康。

评论

  1. 花花蛋
    6年前
    2018-12-29 10:22:41

    是不是有头像呢这样

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇