在大多数情况下,动态类型的行为类似于类型对象,它绕过了静态类型检查。在编译时,假定动态类型的元素支持任何操作。
[来源:MSDN-1、MSDN-2 ]
在你的情况下:
- 这意味着,当您定义一个动态类型的变量时,它将被视为对象类型,因此您可以在其中存储任何值,并且可以将其添加到十进制列表中,编译器不会抛出任何错误。
- 但是在运行时动态变量类型将被解析为“字符串”,并且您正在尝试将字符串值添加到十进制列表中,这就是运行时会抛出异常的原因。
您可以尝试以下代码:
try
{
dynamic name= "test";
var something = new List<decimal>();
something.Add(name);
}
catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException ex)
{
Console.WriteLine(ex.Message);
}
动态类型示例:
using System;
class Program
{
static void Main(string[] args)
{
dynamic dynVar = 2;
Console.WriteLine(dynVar.GetType());
}
}
将输出为:
System.Int32
您正在尝试做什么:
只需在 IDE 中添加以下行,就会显示编译时错误。
List<decimal> dl = new List<decimal>();
dl.Add("Hello");