请注意,整个问题假设可空上下文是 NET 6 中的默认值。
我想编写一个方法Read,它接受不可为空类型(即结构或类)并输出该结构或类的可为空版本。像这样的东西(显然它不仅仅返回默认值,但不需要使这个复杂化):
public static T? Read<T>()
{
return default; //should return null
}
Run Code Online (Sandbox Code Playgroud)
此示例方法应该返回 null,实际上它对于类、可为 null 的类和可为 null 的值类型返回 null,但对于值类型则不然:
Console.WriteLine(null == Read<string>()); //true
Console.WriteLine(null == Read<string?>()); //true
Console.WriteLine(null == Read<int>()); //false
Console.WriteLine(null == Read<int?>()); //true
Run Code Online (Sandbox Code Playgroud)
我想要一个对于所有这些情况都返回 true 的方法。我已经尝试了对 T 的一大堆约束。我觉得notnull约束应该有效,但事实并非如此。
我可以创建两种方法,一种限制为struct(即值类型),一种限制为class(即不可为空的引用类型)。以下作品:
public static T? ReadValue<T>() where T: struct
{
return null; //does return null
}
public static T? ReadRef<T>() where T: class
{
return null; //does …Run Code Online (Sandbox Code Playgroud)