gpt4 book ai didi

c# - 通过 Activator.CreateInstance 创建可为 null 的对象返回 null

转载 作者:太空狗 更新时间:2023-10-29 20:17:57 26 4
gpt4 key购买 nike

我正在创建一个将小脚本转换为 dll 的系统。当我尝试采用可为 null 的值类并将其设置为参数的默认值时遇到问题。问题是我需要在编译器中创建用户选择的可为空的实例并将其设置为常量。

不幸的是,每当我使用 Activator.CreateInstance(NullableType)(其中 NullableType 是根据用户输入创建的类型)时,我都会得到 null 作为返回值。例如,简单地执行:

object Test = Activator.CreateInstance(typeof(Nullable<int>));
Console.WriteLine(Test == null);

返回真值。这发生在 Nullables 中。在 C# 中创建的结构,即使是通用结构,也可以很好地创建。哎呀,如果我从 DotNetReflector 复制并粘贴 nullable(并删除 TypeDependencyAttribute、TargetPatchingOptOutAttribute 和 ThrowHelper 调用,因为我无权访问这些调用),它会在上面显示 False。

这是怎么回事?当我直到运行时才知道泛型参数时,是否有任何其他可能的方法来创建可为 null 的对象?

最佳答案

来自 this MSDN blog :

Activator.CreateInstance could never be expected to return null before; with this DCR, it will return null when creating instance of type Nullable but not providing non-null T value. For example, Activator.CreateInstance(typeof(Int32?)) returns null.

问题与 Nullable<T> 的变量有关按照博客文章的解释装箱。

关于c# - 通过 Activator.CreateInstance 创建可为 null 的对象返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8691601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com