相关疑难解决方法(0)

动态添加属性到ExpandoObject

我想在运行时动态地向ExpandoObject添加属性.所以例如添加一个字符串属性调用NewProp我想写类似的东西

var x = new ExpandoObject();
x.AddProperty("NewProp", System.String);
Run Code Online (Sandbox Code Playgroud)

这很容易吗?

c# dynamic expandoobject c#-4.0

215
推荐指数
3
解决办法
10万
查看次数

在ASP.NET MVC中的模型中调用UrlHelper

我需要在ASP.NET MVC中的模型中生成一些URL.我想调用类似于UrlHelper.Action()的东西,它使用路由生成URL.我不介意填写通常的空白,如主机名,方案等.

有什么方法我可以打电话给那个吗?有没有办法构建UrlHelper?

asp.net-mvc urlhelper

156
推荐指数
4
解决办法
8万
查看次数

将Dictionary <string,object>转换为匿名对象?

首先,为了让事情更清楚,我将从顶部解释我的情景:

我有一个具有以下签名的方法:

public virtual void SendEmail(String from, List<String> recepients, Object model)
Run Code Online (Sandbox Code Playgroud)

我想要做的是生成一个匿名对象,它具有模型对象的属性以及前两个参数.将模型对象展平为PropertyInfo []非常简单.因此,我想到创建一个包含PropertyInfo和前两个参数的字典,然后转换为匿名对象,其中键是属性的名称,值是属性的实际值.

那可能吗?还有其他建议吗?

.net c# dictionary anonymous-types

75
推荐指数
5
解决办法
6万
查看次数

如何动态评估C#表达式?

我想做相当于:

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)

c# reflection eval

49
推荐指数
3
解决办法
9万
查看次数

转换为匿名类型

我今天遇到了以下问题,我想知道我的问题是否有解决方案.

我的想法是构建匿名类并将其用作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# anonymous-types anonymous-class

49
推荐指数
4
解决办法
4万
查看次数

匿名类型与动态类型

c#3.0中的匿名类型(var)和c#4.0中的动态类型(动态)之间的真正区别是什么?

.net c# dynamic anonymous-types

39
推荐指数
5
解决办法
2万
查看次数

在C#中动态创建数组的方法

首先,我在.Net方面没有太多经验 - 特别是在过去的7年里.

我正在尝试开发一个应用程序,并将合并另一个库(https://github.com/Giorgi/Math-Expression-Evaluator)

那个库允许我评估数学表达式Evaluate("a+b", a: 1,b: 1).方法签名是public decimal Evaluate(string expression, object argument = null)

  1. 我想更好地理解.Net如何将逗号分隔的参数转换为单个"参数".
  2. 我不确定如何动态创建该参数...例如,迭代值列表并创建一个与该签名的相应参数匹配的对象.

我真的只是寻找文档和更多信息的指针..感谢您的任何事情.

编辑:抱歉..故意留下它广泛,因为我不是在寻找人为我做我的工作..似乎无法找到一个起点做我自己的研究.

该方法称为

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()签名匹配的对象.

.net c# scripting

6
推荐指数
1
解决办法
115
查看次数