相关疑难解决方法(0)

扩展方法和动态对象

我将把我的问题总结为以下代码片段.

List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 };
Console.WriteLine(list.First());
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常.

现在我尝试了以下内容

dynamic dList = list;
 Console.WriteLine(dList.First());
Run Code Online (Sandbox Code Playgroud)

但是我得到了RuntimeBinderException.为什么会这样?

c# dynamic c#-4.0

93
推荐指数
3
解决办法
2万
查看次数

当使用动态args链接方法时,为什么VS2010 IntelliSense会失败

我想对你的C#4.0动态专家进行一些解释.

我有一个流畅的构建器类来帮助在创建对象之前配置它.这个接口有一个方法SetParameters(...):

    public FluentBuilder<TInterface> SetParameters(dynamic parameters)
    {
        _parameters = parameters;
        return this;
    }
Run Code Online (Sandbox Code Playgroud)

我这样做是为了使用流畅的界面:

var order = new Order();

/* Setting up parameters */
dynamic parameters = new ExpandoObject();
parameters.Transaction = transactionObj;
parameters.CurrentPrincipal = Thread.CurrentPrincipal;

var proxiedOrder = ObjectProxyFactory
    .Configure<IOrder>(order)
    .FilterMethods(o => o.InsertOrder())
    .AddPreDecoration(AppConcerns.JoinSqlTransaction)
    .AddPreDecoration(AppConcerns.EnterLog)
    .AddPostDecoration(AppConcerns.ExitLog)
    .AddPostDecoration(AppConcerns.SecurityCheck)
    .SetParameters(parameters)
    .Teste() //this method doesn't exist in the fluent builder
    .CreateProxy();

var result = proxiedOrder.InsertOrder();
Run Code Online (Sandbox Code Playgroud)

如上面的片段中所述,名为Teste()的方法在fluent界面中不存在,但是在调用SetParameters之后,intelissense允许写任何方法,就像它返回动态一样,但正如你在代码中看到的那样,SetParameters返回非动态的FluentInterface .

上面的代码在运行时成功编译将失败,因为在运行时,在FluentBuilder类中找不到方法Teste().

要在设计时解决此问题,并获得正确的Intelissense,我需要将参数强制转换为ExpandoObject类:

var proxiedOrder = ObjectProxyFactory
.Configure<IOrder>(order)
.FilterMethods(o => o.InsertOrder())
.AddPreDecoration(AppConcerns.JoinSqlTransaction)
.AddPreDecoration(AppConcerns.EnterLog)
.AddPostDecoration(AppConcerns.ExitLog)
.AddPostDecoration(AppConcerns.SecurityCheck)
.SetParameters((ExpandoObject)parameters) //cast …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio-2010 c#-4.0

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

标签 统计

c# ×2

c#-4.0 ×2

dynamic ×1

visual-studio-2010 ×1