我是靠谱客的博主 昏睡冷风,这篇文章主要介绍百行代码轻松实现C#中的Eval函数,现在分享给大家,希望可以做个参考。

    使用过Javascript中的Eval函数的兄弟肯定对这个函数情有独钟,该函数能动态的执行我们传递进去的表达式。使用Eval函数咱们能轻松的制作可编程的程序,那C#是否也有这样的函数呢?答案是肯定的,不过C#并没有实现现成的方法供我们使用。但是这并不能阻止咱们这帮爱偷懒的程序员们。

    现在我们就在C#中实现一个Eval函数吧,具体操作如下:

图1

图2

图3

图4

 

程序代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System; using System.Linq; using System.Text; using System.Collections.Generic; using System.CodeDom.Compiler; using Microsoft.CSharp; using System.Reflection; namespace CSHARP_EVAL_FUNCTION { public class EVAL { private static string prefix = @"using System; public static class DynamicClass { public static void Bomb() {"; public static string postfix = @"}}"; public string content { get; set; } public void Eval() { if (content == "") { Console.WriteLine("必须为Content属性赋予值"); return; } string code = prefix + content + postfix; CompilerResults result = null; using (var provider = new CSharpCodeProvider()) { var options = new CompilerParameters(); options.GenerateInMemory = true; result = provider.CompileAssemblyFromSource(options, code); if (result.Errors.HasErrors)//编译有错误 { var errorMsg = new StringBuilder(); foreach (CompilerError error in result.Errors) { errorMsg.AppendFormat("Line:{0},Column:{1},Content:{2}", error.Line, error.Column, error.ErrorText); } Console.WriteLine(errorMsg.ToString()); } else//运行类 DynamicClass 中的HelloWorld方法 { Type dynamicClass = result.CompiledAssembly.GetType("DynamicClass"); dynamicClass.InvokeMember("Bomb", BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public, null, null, null); } } } } }


 

 

源码下载

 

 

 

 

最后

以上就是昏睡冷风最近收集整理的关于百行代码轻松实现C#中的Eval函数的全部内容,更多相关百行代码轻松实现C#中内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部