AddingaListtoAListAsanIListThrowExceptionUsing.NET3.5andC#3.0,IListlist=newList();list.Add(空);抛出一个ArgumentException,只是感觉不对。列表列表=新列表();列表。添加(空);完美运行。这是微软代码中的错误吗?这个错误在现实生活中如何出现的一个例子:newJavaScriptSerializer().Deserialize("[true,false,null]");是的。有关其他报告,请参阅http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/abc99fb5-e218-4efa-8969-3d96f6021cee/。基本上,当您通过其弱类型IList实现访问List时,它会在尝试将项目添加到内部存储之前进行一些类型检查-并检查此类型的可空类型是否有错误。这是“设计使然”并且明确如此。原因是List有一个IList的显式实现。它过滤传递给各种方法的值来做一些空值检查。逻辑基本如下if(default(T)!=null&&value==null){throw...}在这种情况下,一个值类型(而nullable是一个值类型)的默认值不为null,所以不允许。哈!这是一个有趣的。我认为这与bool严格作为结构实现的可疑想法有关,而IList需要一个对象,也许它需要一个包装bool或其他东西。你在哪里乔恩双向飞碟?我们需要你!(点击rubyslipper3次)当你调用IList上的Add方法时传入一个空值,是你传递给该方法的空引用,而不是可空值。无法将空引用转换为可为空的值。Add方法需要包含bool或bool?。由于无法加载空值,因此无法创建可用于向IList添加空值的对象。如果使用通用接口IList,则添加值没有问题:IListlist=newList();列表。添加(空);正如已经指出的那样,.NET3.5中的List类中的IList.Add(objectitem)方法的实现中存在一个错误(可能之前)。问题是,IList.Add(objectitem)方法试图验证我们尝试添加的对象是与List泛型类型参数兼容的对象,当我们尝试将null添加到可为空值类型的列表时失败.我的解决方法涉及通过从List对象获取和调用Add(Titem)方法进行反射。IList列表=新列表();MethodInfoaddMethod=list.GetType().GetMethod("添加");addMethod.Invoke(list,newobject[]{null});您正在使用带有非通用IList的通用列表。List继承自IList而不是IList。以上就是C#学习教程:AddingListtoListasIListThrowinganexception的全部内容分享。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
