小编Tes*_*ill的帖子

如何在同一个方法中处理 notnull 类和值类型?

请注意,整个问题假设可空上下文是 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)

c# null .net-core nullable-reference-types

5
推荐指数
1
解决办法
172
查看次数

标签 统计

.net-core ×1

c# ×1

null ×1

nullable-reference-types ×1