我需要创建一个可以保存以下类型值的类:int?, decimal?, date, bool? string
。
我希望能够这样做:
var x = new MyClass<int?>()
x.Value = null;
x.value = 99;
// or
var y = new MyClass<bool?>();
y.Value = null;
y.Value = true
// and so on
我一直在尝试创建一个类型为T的类:
public class TestClass<T>
{
public T? Value{ get; set; }
}
我想使用Value来获取任何允许的类型但我无法使其成为可空的。错误是:
只有非可空值类型可能是Sysytem.Nullable
的基础
无论如何都在做我想要实现的目标?
答案 0 :(得分:13)
试试这个:
public class TestClass<T> where T : struct
{
public T? Value{ get; set; }
}
由于class是引用类型,因此类不能为空。您必须为您的泛型类添加约束以仅允许结构(可以为空)。
string
是一种引用类型,在这种情况下,您的类不能与string
一起使用,因为它不能为空。
答案 1 :(得分:5)
问题是你将一个可空的内容传递给你的泛型,然后尝试使它可以为空。
试试这个:
public class TestClass<T>
{
public T Value{ get; set; }
}
现在,当你这样做时:
var x = new MyClass<int?>();
值将被定义为int?
,因此您可以按照自己的方式使用它。如果将其定义为
var x = new MyClass<int>();
值将定义为int
- 并且不接受空值。