将动态对象传递给C#方法会更改返回类型

吉姆·巴克

我创建了一个继承DynamicObject并希望创建一个静态方法类,该方法可以创建具有预定属性(存储在中Dictionary)的新实例

public class CustomDynamic : DynamicObject
{
    protected Dictionary<string, object> InnerDictionary;

    public static T Create<T>(Dictionary<string, object> dictionary) where T : CustomDynamic , new()
    {
        return new T
        {
            InnerDictionary = dictionary
        };
    }
}

用法:

dynamic d = new Dictionary<string, object>();

var realPlayer = CustomDynamic.Create<Player>(d as Dictionary<string, object>);
var dynaPlayer = CustomDynamic.Create<Player>(d);

realPlayer // Player type according to VS2013
dynaPlayer // dynamic type according to VS2013

由于只有一个方法签名,为什么传递动态返回一个动态对象?还是实际上只是Visual Studio 2013变得困惑?

乔恩·斯基特

这是因为几乎所有涉及动态值的操作都会在执行时动态解析。对于在编译时实际上只有一种方法的情况也没有例外。这种语言更简单。(对于某些调用,编译器确实会在编译时执行足够的分辨率,以确保至少有一种方法具有适当数量的参数-这是在C#5规范的7.5.4节中指定的,但是没有影响有效收益类型。)

根据C#5规范的第7.6.5节:

如果满足以下至少一项条件,则动态绑定一个Invocation-Expression

  • 基本表达式具有编译时类型dynamic
  • 可选参数列表的至少一个参数具有编译时类型dynamic,并且主表达式没有委托类型。

在这种情况下,编译器将invocation-expression分类为type的值dynamic[...]

一些涉及动态值的操作仍然具有非动态整体类型。例如:

  • d is Foo 总是 bool
  • d as Foo 总是 Foo
  • new Foo(d)Foo即使在执行时确定要使用的确切构造函数,也总是

但是任何方法调用都被视为返回类型为dynamic

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Javascript对象传递给C#

来自分类Dev

如何将C#对象传递给$ .ajax

来自分类Dev

C#将对象传递给不同的方法

来自分类Dev

如何将任何可以显示文本的对象传递给C#方法

来自分类Dev

如何将任何可以显示文本的对象传递给C#方法

来自分类Dev

C#将子对象传递给要用基类的通用属性填充的方法

来自分类Dev

将 JSON 嵌套对象传递给 Post() 方法 - C# WebAPI

来自分类Dev

将Class对象传递给方法

来自分类Dev

将对象传递给方法会导致对象没有值?

来自分类Dev

将对象传递给方法会导致没有值的对象?

来自分类Dev

将动态创建的对象传递给函数

来自分类Dev

动态将对象传递给类方法

来自分类Dev

将未知类型的对象传递给函数

来自分类Dev

将未知类型的对象传递给函数

来自分类Dev

如何将未知对象传递给方法并确定其类型?

来自分类Dev

如何将强类型的复杂对象传递给MVC3中的Ajax方法

来自分类Dev

C#将引用类型对象的数组传递给C ++

来自分类Dev

如何从PHP将DateTime对象传递给用C#编写的Soap Web服务?

来自分类Dev

通过Razor(MVC4)将C#字典对象传递给JavaScript

来自分类Dev

是否可以将Moq对象传递给C#类构造函数?

来自分类Dev

如何将数组对象传递给 C# Web 服务

来自分类Dev

C# Razor View 将 null 对象传递给 JavaScript

来自分类Dev

将通用对象传递给方法中的列表-JAVA

来自分类Dev

Python:将mutable(?)对象传递给方法

来自分类Dev

将类的对象传递给类中的方法

来自分类Dev

将JRuby对象传递给Java方法?

来自分类Dev

将属性作为对象传递给方法

来自分类Dev

Java - 将符号类对象传递给方法

来自分类Dev

将自定义对象传递给Progress Changed方法。C#

Related 相关文章

热门标签

归档