我想在运行时动态地向ExpandoObject添加属性.所以例如添加一个字符串属性调用NewProp我想写类似的东西
var x = new ExpandoObject();
x.AddProperty("NewProp", System.String);
Run Code Online (Sandbox Code Playgroud)
这很容易吗?
我需要在ASP.NET MVC中的模型中生成一些URL.我想调用类似于UrlHelper.Action()的东西,它使用路由生成URL.我不介意填写通常的空白,如主机名,方案等.
有什么方法我可以打电话给那个吗?有没有办法构建UrlHelper?
首先,为了让事情更清楚,我将从顶部解释我的情景:
我有一个具有以下签名的方法:
public virtual void SendEmail(String from, List<String> recepients, Object model)
Run Code Online (Sandbox Code Playgroud)
我想要做的是生成一个匿名对象,它具有模型对象的属性以及前两个参数.将模型对象展平为PropertyInfo []非常简单.因此,我想到创建一个包含PropertyInfo和前两个参数的字典,然后转换为匿名对象,其中键是属性的名称,值是属性的实际值.
那可能吗?还有其他建议吗?
我想做相当于:
object result = Eval("1 + 3");
string now = Eval("System.DateTime.Now().ToString()") as string
Run Code Online (Sandbox Code Playgroud)
在Biri的链接之后,我得到了这个片段(修改后删除了过时的方法ICodeCompiler.CreateCompiler():
private object Eval(string sExpression)
{
CSharpCodeProvider c = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");
cp.CompilerOptions = "/t:library";
cp.GenerateInMemory = true;
StringBuilder sb = new StringBuilder("");
sb.Append("using System;\n");
sb.Append("namespace CSCodeEvaler{ \n");
sb.Append("public class CSCodeEvaler{ \n");
sb.Append("public object EvalCode(){\n");
sb.Append("return " + sExpression + "; \n");
sb.Append("} \n");
sb.Append("} \n");
sb.Append("}\n");
CompilerResults cr = c.CompileAssemblyFromSource(cp, sb.ToString());
if (cr.Errors.Count > 0)
{
throw …Run Code Online (Sandbox Code Playgroud) 我今天遇到了以下问题,我想知道我的问题是否有解决方案.
我的想法是构建匿名类并将其用作WinForm BindingSource的数据源:
public void Init()
{
var option1 = new
{
Id = TemplateAction.Update,
Option = "Update the Templates",
Description = "Bla bla 1."
};
var option2 = new
{
Id = TemplateAction.Download,
Option = "Download the Templates",
Description = "Bla bla 2."
};
var list = new[] {option1, option2}.ToList();
bsOptions.DataSource = list; // my BindingSource
// cboTemplates is a ComboBox
cboTemplates.DataSource = bsOptions;
cboTemplates.ValueMember = "Id";
cboTemplates.DisplayMember = "Option";
lblInfoTemplates.DataBindings.Add("Text", bsOptions, "Description");
}
Run Code Online (Sandbox Code Playgroud)
到目前为止工作正常.
我遇到的问题是从BindingSource的"Current"属性中获取Id,因为我无法将其强制转换为匿名类型:
private void cmdOK_Click(object …Run Code Online (Sandbox Code Playgroud) c#3.0中的匿名类型(var)和c#4.0中的动态类型(动态)之间的真正区别是什么?
首先,我在.Net方面没有太多经验 - 特别是在过去的7年里.
我正在尝试开发一个应用程序,并将合并另一个库(https://github.com/Giorgi/Math-Expression-Evaluator)
那个库允许我评估数学表达式Evaluate("a+b", a: 1,b: 1).方法签名是public decimal Evaluate(string expression, object argument = null)
我真的只是寻找文档和更多信息的指针..感谢您的任何事情.
编辑:抱歉..故意留下它广泛,因为我不是在寻找人为我做我的工作..似乎无法找到一个起点做我自己的研究.
该方法称为
dynamic engine = new ExpressionEvaluator() ;
engine.Evaluate("(c+b)*a", a: 6, b: 4.5, c: 2.6)) ;
Run Code Online (Sandbox Code Playgroud)
在Evalute()的主体中是这个代码(它将该参数转换为字符串字典,十进制对.
if (argument == null)
{
return new Dictionary<string, decimal>();
}
var argumentType = argument.GetType();
var properties = argumentType.GetProperties(BindingFlags.Instance | BindingFlags.Public)
.Where(p => p.CanRead && IsNumeric(p.PropertyType));
var arguments = properties.ToDictionary(property => property.Name,
property => Convert.ToDecimal(property.GetValue(argument, null)));
return arguments;
Run Code Online (Sandbox Code Playgroud)
我希望能够做的是解析像"a:1,b:2"之类的字符串并将其转换为与该Evaluate()签名匹配的对象.
c# ×6
.net ×3
dynamic ×2
asp.net-mvc ×1
c#-4.0 ×1
dictionary ×1
eval ×1
reflection ×1
scripting ×1
urlhelper ×1