|
|
1
49
不幸的是,C不是那种动态语言。 然而,您可以做的是创建一个包含类和所有内容的C源代码文件,并通过C的codedom提供程序运行它,然后将其编译成一个程序集,然后执行它。
这个在msdn上的论坛帖子包含了一个答案,页面下面有一些示例代码:
我很难说这是一个很好的解决方案,但无论如何都是可能的。 您希望在该字符串中使用哪种代码?如果它是有效代码的一个子集,例如,仅仅是数学表达式,那么可能存在其他的替代方法。 编辑 好吧,那教我先把问题读清楚。是的,反思可以给你一些帮助。 如果按;拆分字符串,首先要获取单个属性,可以使用以下代码为类的特定属性获取PropertyInfo对象,然后使用该对象操作特定对象。
|
|
|
2
15
使用Roslyn脚本API(更多 samples here ):
您还可以运行任何代码:
并引用以前运行中生成的代码:
|
|
3
14
不是真的。您可以使用反射来实现您想要的,但它不会像在JavaScript中那样简单。例如,如果要将对象的私有字段设置为某个值,可以使用此函数:
|
|
|
4
9
这是C下的eval函数。我使用它从字符串转换匿名函数(lambda表达式)。 来源: http://www.codeproject.com/KB/cs/evalcscode.aspx
|
|
5
9
我写了一个开源项目, Dynamic Expresso ,它可以将使用C语法编写的文本表达式转换为委托(或表达式树)。表达式被解析并转换为 Expression Trees 不使用编译或反射。 你可以写一些像:
或
我的工作是基于古斯考特的文章 http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx . |
|
|
6
7
所有这些肯定会奏效的。就个人而言,对于那个特定的问题,我可能会采取一些不同的方法。可能是这样的:
当使用这样的模式时,必须注意数据是通过引用而不是通过值存储的。换句话说,不要用原语来做这个。你必须使用他们那些臃肿的同班同学。 我意识到这不完全是问题所在,但问题已经得到了很好的回答,我想也许有一种替代方法可以帮上忙。 |
|
|
7
5
|
|
|
8
4
可以使用反射来获取属性并调用它。像这样:
也就是说,假设具有该属性的对象称为“theObject”:) |
|
9
2
您还可以实现WebBrowser,然后加载包含javascript的HTML文件。
然后你去
我在几个项目中做了这个,它工作得很好。 希望它有帮助 |
|
|
10
0
你可以用一个原型函数来完成它:
等等… |
|
|
11
0
使用反射在运行时针对对象分析和计算数据绑定表达式。 |
|
|
12
0
我写了一个包裹, SharpByte.Dynamic 以简化动态编译和执行代码的任务。可以使用扩展方法在任何上下文对象上调用代码,详情如下 here . 例如,
回报率3;
返回上下文对象的字符串表示形式;
将这些语句作为脚本等运行。 可执行文件可以很容易地使用工厂方法获得,如示例中所示。 here --您所需要的只是源代码和任何预期命名参数的列表(标记是使用三方括号表示法嵌入的,如0,以避免与string.format()以及诸如syntaxes之类的手把冲突):
每个可执行对象(脚本或表达式)都是线程安全的,可以存储和重用,支持从脚本中进行日志记录,存储计时信息和最后一个异常(如果遇到),等等。每个对象上还编译了copy()方法,以允许创建便宜的副本,即使用从脚本或表达式编译的可执行对象作为项。创造他人的板。 执行一个已经编译的脚本或语句的开销相对较低,在中等的硬件上只需一微秒,并且已经编译的脚本和表达式被缓存以供重用。 |
|
|
13
0
我试图通过一个结构(类)成员的名称来获取它的值。结构不是动态的。直到我最终得到答案,所有的答案才奏效:
此方法将按成员的名称返回其值。它在规则结构(类)上工作。 |
|
|
14
0
你可以查一下 Heleonix.Reflection 图书馆。它提供了动态获取/设置/调用成员(包括嵌套成员)的方法,或者如果明确定义了成员,则可以创建比反射更快的getter/setter(lambda编译为委托):
或者,如果属性的数量不是无限的,则可以生成setter并对其进行修改(setter更快,因为它们是编译的委托):
setter不能是类型
|
|
|
15
-2
不幸的是,C没有任何本地设施来满足您的要求。 但是,我的C eval程序允许评估C代码。它提供在运行时评估C代码,并支持许多C语句。实际上,此代码在任何.NET项目中都是可用的,但是,它仅限于使用C语法。看看我的网站, http://csharp-eval.com ,了解更多详细信息。 |
|
|
16
-8
正确的答案是,您需要缓存所有结果,以保持内存使用率低。 示例如下
并将其添加到列表中
保存ID并在代码中使用 希望这有帮助 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |