gpt4 book ai didi

c# - 通过 HasValue = false 的反射创建 Nullable,仅给定类型为 `Type` 的参数

转载 作者:太空宇宙 更新时间:2023-11-03 21:22:44 24 4
gpt4 key购买 nike

给定一个类型参数 Nullable<> ,如何创建具有 HasValue = false 的该类型的实例?

换句话说,完成这段代码:

//type is guaranteed to implement Nullable<>
public static object Create(Type type)
{
//Instantiate a Nullable<T> with reflection whose HasValue = false, and return it
}

我的尝试无效(它抛出 NullReferenceException),因为没有默认构造函数:

static void Main(string[] args)
{
Console.WriteLine(Create(typeof(Nullable<int>)));

Console.ReadLine();
}

//type is guaranteed to be implement from Nullable<>
public static object Create(Type type)
{
//Instantatie a Nullable<T> with reflection whose HasValue = false, and return it
return type.GetConstructor(new Type[0]).Invoke(new object[0]);
}

最佳答案

Given a type parameter which is a Nullable<>, how can I create an instance of that type which has HasValue = false?

如果您想要一个签名为 object 的方法, 你只要返回 null :

//type is guaranteed to be implement from Nullable<>
public static object Create(Type type)
{
return null;
}

这将始终是任何可空类型值的盒装表示形式,其中 HasValue一片空白。换句话说,该方法毫无意义......你还不如使用 null文字:

var i = (int?) null;

当然,如果type不保证是可为空的值类型,您可能希望对代码进行条件化...但重要的是要了解不存在 Nullable<T>对象 表示形式。值(value)。即使对于非 null 值,装箱表示也是 non-nullable 类型的装箱表示:

int? x = 5;
object y = x; // Boxing
Console.WriteLine(y.GetType()); // System.Int32; nullability has vanished

关于c# - 通过 HasValue = false 的反射创建 Nullable,仅给定类型为 `Type` 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29627013/

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