C# 为什么会有一个可为null的<;T>;结构和可空类?
有一个C# 为什么会有一个可为null的<;T>;结构和可空类?,c#,nullable,C#,Nullable,有一个Nullablestruct,还有一个静态Nullable类,包含三个静态方法 我的问题是,为什么静态Nullable类中的这些静态方法不能进入Nullable结构?将它们定义为两种不同类型的原因是什么 还有一个INullable接口。它做什么 泛型的标准做法是使用与泛型类同名的类以及与泛型类相关的实用方法。因为当您使用泛型类时,您无法在类型声明中推断泛型,最终将得到更多的字符。 看看如果静态方法放在泛型类中会是什么样子: Nullable<int?>.Compare(x, Y
Nullable
struct,还有一个静态Nullable
类,包含三个静态方法
我的问题是,为什么静态Nullable
类中的这些静态方法不能进入Nullable
结构?将它们定义为两种不同类型的原因是什么
还有一个INullable
接口。它做什么
Nullable<int?>.Compare(x, Y);
var n = new Tuple<int,string>(10, "Text");
我把Tuple作为另一个例子{
int? a = 10;
long? b = 10L;
Process(a);
Process(b);
}
private static void Process(INullable value)
{
if (value.IsNull)
{
// Process for null ..
}
else
{
// Process for value ..
}
}
它们是一个单独的类,因为这些方法是实用方法,可以在任何地方使用,而不必每次使用这些方法时都创建一个
null
结构实例
public static bool Is<T>(this T variable,Type type) {
if (var != null) {
Type currentType = variable.GetType();
type = Nullable.GetUnderlyingType(type) ?? type;
while (currentType != typeof(object)) {
if (currentType == type) {
return true;
}
currentType = currentType.BaseType;
}
}
return false;
}
公共静态bool Is(此T变量,类型){
如果(var!=null){
类型currentType=variable.GetType();
类型=可空。GetUnderlineType(类型)??类型;
while(currentType!=typeof(object)){
if(currentType==类型){
返回true;
}
currentType=currentType.BaseType;
}
}
返回false;
}
在上面的示例中,变量可以是任何类型(不一定是nullable
),但实际上它可以是nullable
,因此必须检查nullable
对于这种情况,我使用了
Nullable.getunderyingtype(type)
,因为它是一种实用方法。这是实用方法的预期行为,即使它们可以在任何需要的地方重用,而无需每次需要时创建实例 很好的解释它的可能重复不是重复。@Abion47也许你没有理解我的问题。我从来没有看过一篇关于某些泛型类的非泛型类的文章,但是通过查看.NET framework中的多个泛型类,我得出了这个结论。您可以看到非泛型类Tuple和Nullable的文档,您会注意到它们的出现就像它们是同一个类一样
public static bool Is<T>(this T variable,Type type) {
if (var != null) {
Type currentType = variable.GetType();
type = Nullable.GetUnderlyingType(type) ?? type;
while (currentType != typeof(object)) {
if (currentType == type) {
return true;
}
currentType = currentType.BaseType;
}
}
return false;
}