Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 该类型必须是不可为null的值类型,才能将其用作泛型类型或方法“System.nullable”中的参数“T”_C# - Fatal编程技术网

C# 该类型必须是不可为null的值类型,才能将其用作泛型类型或方法“System.nullable”中的参数“T”

C# 该类型必须是不可为null的值类型,才能将其用作泛型类型或方法“System.nullable”中的参数“T”,c#,C#,我创建了一个泛型类: public class Pair<L, R> { public L? left; public R? right; // some code } 我想为泛型类型使用可空变量。编译器给出错误: 该类型必须是不可为null的值类型,才能将其用作 泛型类型或方法“System.Nullable”中的参数“T” 在这种情况下,为了克服这个错误,正确的构造应该是什么?谢谢。您可以将它们约束为值类型: public class Pair<

我创建了一个泛型类:

public class Pair<L, R>
{
    public L? left;
    public R? right;
    // some code
}
我想为泛型类型使用可空变量。编译器给出错误:

该类型必须是不可为null的值类型,才能将其用作 泛型类型或方法“System.Nullable”中的参数“T”


在这种情况下,为了克服这个错误,正确的构造应该是什么?谢谢。

您可以将它们约束为值类型:

 public class Pair<L, R>  
     where L: struct
     where R: struct
但这不允许引用类型类,不清楚这是否是您想要的。 当L和R是引用类型时,您不需要

编写一个同时允许两者的泛型对要困难得多。我不确定是否可以直接做。也许在C8


否则,您将需要对成员进行包装。

是否希望仅对此类使用值类型,还是同时使用值类型和引用类型?旁注:不要使用公共字段,将其设置为属性。读一下immutable,你们的一对应该是这样设计的。当然,我使用字段。最初,它们是私人的。我在这里公开公众只是为了简化代码并尽可能简洁地说明问题。解决方案不取决于它们是私人的还是公共的。谢谢您的回复。它是否也适用于不是结构的基本类型?如果我对复杂类型有限制,我可以在内部进行空检查。但我想在模板类型中普遍使用它,因为模板类型本身不能为null。例如,bool、int等。正确的语法是公共类对,其中L:struct,其中R:struct,在第一个“struct”之后没有逗号。奇怪但真实。@BorisZinchenko:基本类型是结构。@Jon Skeet,非常感谢您的澄清。我将尝试编译,然后将其标记为答案。@BorisZinchenko:如果您想表示某个值可能丢失,并随意使用值类型和引用类型,则必须使用选项类型。有几个实现可与C一起使用;请搜索并探索哪一个适合您的用例。