C# 类型的类别<;T>;具有类型为<;的可空值;T>;

C# 类型的类别<;T>;具有类型为<;的可空值;T>;,c#,generics,nullable,C#,Generics,Nullable,我需要创建一个类来保存以下类型的值:int?,decimal?,date?,bool?字符串 我想做一些事情,比如: 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 var x=new MyClass() x、 值=空

我需要创建一个类来保存以下类型的值:
int?,decimal?,date?,bool?字符串

我想做一些事情,比如:

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
var x=new MyClass()
x、 值=空;
x、 数值=99;
//或
var y=新的MyClass();
y、 值=空;
y、 值=真
//等等
我一直在尝试创建一个类型为T的类,大致如下:

public class TestClass<T>
{             
    public T? Value{ get; set; }
}
公共类TestClass
{             
公共T?值{get;set;}
}
我想使用Value获取任何允许的类型,但我不能使t为null。错误是:

只有不可为Null的值类型可以是Sysytem.nullable的基础

还有什么方法可以实现我的目标吗?

试试这个:

public class TestClass<T> where T : struct
{             
    public T? Value{ get; set; }
}
public class TestClass<T>
{             
    public T Value{ get; set; }
}
公共类TestClass,其中T:struct
{             
公共T?值{get;set;}
}
类不能为Null,因为类是引用类型。您必须向泛型类添加约束,以便只允许结构(可以为null)


string
是一种引用类型,在这种情况下,您的类将无法使用
string
它,因为它不能为null

问题在于,您正在将一个可为null的值传递到泛型中,然后试图使其为null

试试这个:

public class TestClass<T> where T : struct
{             
    public T? Value{ get; set; }
}
public class TestClass<T>
{             
    public T Value{ get; set; }
}

值将被定义为
int
-并且不接受空值。

谢谢。那么,是否可以将同一个类与值和引用类型一起使用,如:var y=new TestClass或new TestClass?只要您不试图通过编写
public T来强制它们为null,就可以了?值{get;set;}
啊,我现在知道了。谢谢。一定是我,但这在我尝试过的任何场景中都不起作用,仍然会抛出一个异常:-(抱歉,为了方便起见复制了代码并进行了修改-不幸的是,我是从gzaxx的帖子而不是davy的帖子中复制的。更正了这个问题。请参阅帖子中的答案。”。在即将发布的c#8版本中,引用类型默认为非空。