我正在创建一个将小脚本转换为 dll 的系统。当我尝试采用可为空值类并将其设为参数的默认值时,我遇到了问题。
问题是我需要在编译器中创建用户选择的可为空的实例并将其设置为常量。
不幸的是,每当我使用Activator.CreateInstance(NullableType)
(其中 NullableType 是根据用户输入创建的类型)我得到null
作为返回值。例如,只需执行:
object Test = Activator.CreateInstance(typeof(Nullable<int>));
Console.WriteLine(Test == null);
返回真。这ONLY发生在可为 Nullable 的情况下。用 C# 创建的结构,即使是通用结构,也可以很好地创建。哎呀,如果我从 DotNetReflector 复制并粘贴 nullable(并删除 TypeDependencyAttribute、TargetPatchingOptOutAttribute 和 ThrowHelper 调用,因为我无权访问这些调用),它会在上面显示 False。
到底是怎么回事?当我在运行时之前不知道通用参数时,是否有其他可能的方法来创建可为空的?
From 这个 MSDN 博客 http://blogs.msdn.com/b/haibo_luo/archive/2005/08/23/455241.aspx:
Activator.CreateInstance 永远不能返回 null
前;使用此 DCR,创建实例时将返回 null
类型 Nullable 但不提供非空 T 值。例如,
Activator.CreateInstance(typeof(Int32?)) 返回 null。
问题与变量如何Nullable<T>
按照博客文章的解释装箱。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)