深入理解 c# 第十四章 整数与整数相加 动态类型

class FirstSteps3
    {
        static void Main()//整数与整数相加  动态类型
        {
            dynamic items = new List<int> { 1, 2, 3 };
//items {System.Collections.Generic.List<int>}			
            dynamic valueToAdd = 2;
//valueToAdd 2			
            foreach (dynamic item in items)
//item 1 2 3			
            {
               string result = item + valueToAdd;
			   //exception	{"无法将类型“int”隐式转换为“string”"}	
			   //System.Exception {Microsoft.CSharp.RuntimeBinder.RuntimeBinderException}

               Console.WriteLine(result);
            }
        }
    }


  悲剧,试图将相加的结果转换为字符串。允许的唯一转换与C#中的常规语法一样,不会将int
转换成string。结果将产生异常。
  除非很熟,否则开始使用动态类型时会频繁遭遇RuntimeBinderException。从某种程度上说,
它是一种新型的NullReferenceException。


输出
Exception: System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 无法将类型“int”隐式转换为“string”
   在 CallSite.Target(Closure , CallSite , Object )
   在 System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
   在 Chapter14.FirstSteps3.Main() 位置 c:\FirstSteps3.cs:行号 16 位置是文件的位置
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   在 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   在 MiscUtil.ApplicationChooser.Run(Type type, String[] args)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值