【发布时间】:2015-09-22 17:17:14
【问题描述】:
我收到了带有消息的RuntimeBinderException
无法将类型“object”隐式转换为“MyNamespace.SomeEnum?”。存在显式转换(您是否缺少演员表?)
以下代码会产生该错误:
public enum SomeEnum
{
Val1
}
public class Example
{
public SomeEnum? EnumMember { get; set; }
}
public static class Program
{
static void Main()
{
dynamic example = new Example();
// Works without issue
example.EnumMember = (dynamic)Enum.Parse(typeof(SomeEnum), "Val1");
// Works without issue
example.EnumMember = Enum.Parse(example.EnumMember.GetType(), "Val1");
// Throws the aforementioned RuntimeBinderException
example.EnumMember = Enum.Parse(typeof(SomeEnum), "Val1");
}
}
为什么前两行有效(均返回类型为动态),但第三行抛出异常(当返回类型为对象时)?我的印象是,当分配给动态时,绑定是使用右侧的实际运行时类型执行的。有人可以请教我为什么第三行无法按所写的那样运行吗?
【问题讨论】: