...与明显返回一个物体相比。当将对象分配给动态声明的变量时,魔法会开始,那么返回动态会产生什么影响呢?
那么有什么区别:
static object CreateMagicList()
{
return new List<string>();
}
和
static dynamic CreateMagicList()
{
return new List<string>();
}
它们似乎都完全相同,例如:
dynamic list = CreateMagicList();
list.Add( "lolcat" );
请注意,这不是一个实际问题。我对部分原因感兴趣:)
答案 0 :(得分:2)
我最好的猜测是,您可以返回dynamic
,以便您可以这样做:
private static dynamic Get() {
return new {X=5};
}
public static void Main() {
var v = Get();
Console.WriteLine(v.X);
}
如果您只能将Get
声明为object Get()
,那么您的调用者将被强制用var
替换dynamic
:否则,代码将无法编译。
同样适用于没有var
的用例:
public static void Main() {
Console.WriteLine(Get().X);
}
没有dynamic
返回类型,您必须进行中间分配,或使用强制转换为dynamic
。
答案 1 :(得分:1)
我认为理解你的例子中的特定情况可能不会产生很大的不同,但重要的是要考虑在运行时创建的动态get,这样你就不必动态取消任何动态只需采取一种形式的返回例如,如果不是这样做,你需要不要绑定到动态但列表
static dynamic CreateMagicList()
{
return new List<string>();
}
List<string> list = CreateMagicList();
list.Add( "lolcat" );
这样可以正常工作,因为在运行时你绑定到同一个属性
但是这个
static object CreateMagicList()
{
return new List<string>();
}
List<string> list = CreateMagicList();
list.Add( "lolcat" );
会给你一个错误,因为你必须将其取消装箱
答案 2 :(得分:0)
您可以返回动态,以便将来可以实际返回动态。 MissingMethodInvoke和MissingPropertyInvoke重载。动力学不仅仅是物体。