为什么会有 Nullable<T> 结构和 Nullableclass?
Why is there a Nullable<T> struct and Nullable class?
有一个 Nullable<T>
结构,还有另一个带有三个静态方法的静态 Nullable
class。
我的问题是,为什么 static Nullable
class 中的这些静态方法不能进入 Nullable<T>
结构?将它们定义为两种不同类型的原因是什么?
并且有一个 INullable
界面,因为 well.What 是吗?
泛型的标准做法是让 class 与泛型 class 同名,并使用与泛型 class 相关的实用方法。因为当您使用泛型 class 时,您无法推断类型声明中的泛型,您最终会得到更多的字符。
看看如果将静态方法放在通用 class:
中会怎样
Nullable<int?>.Compare(x, Y);
var n = new Tuple<int,string>(10, "Text");
对
Nullable.Compare(x, Y);
var n = Tuple.Create(10, "Text");
我把元组作为另一个例子。
接口和基础 classes 在泛型中非常有用,并且由于 Nullable<> 是结构并且结构不能有基础 class,我们只剩下接口了。下面是它的一种可能用法。
{
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 ..
}
}
它们是单独编写的 class,因为这些方法是实用方法,旨在用于任何地方,而无需在每次要使用这些方法时实际创建一个 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;
}
在上面的例子中,变量可以是任何类型(不一定是nullable
),但实际上它可以是nullable
,因此必须检查是否nullable
。
对于那种情况,我使用了 Nullable.GetUnderlyingType(type)
,因为它是一个实用程序 method.This 是实用程序方法的预期行为,即使它们可以在任何需要的地方重复使用,而无需创建实例,每次你需要他们。
有一个 Nullable<T>
结构,还有另一个带有三个静态方法的静态 Nullable
class。
我的问题是,为什么 static Nullable
class 中的这些静态方法不能进入 Nullable<T>
结构?将它们定义为两种不同类型的原因是什么?
并且有一个 INullable
界面,因为 well.What 是吗?
泛型的标准做法是让 class 与泛型 class 同名,并使用与泛型 class 相关的实用方法。因为当您使用泛型 class 时,您无法推断类型声明中的泛型,您最终会得到更多的字符。 看看如果将静态方法放在通用 class:
中会怎样Nullable<int?>.Compare(x, Y); var n = new Tuple<int,string>(10, "Text");
对
Nullable.Compare(x, Y); var n = Tuple.Create(10, "Text");
我把元组作为另一个例子。
接口和基础 classes 在泛型中非常有用,并且由于 Nullable<> 是结构并且结构不能有基础 class,我们只剩下接口了。下面是它的一种可能用法。
{ 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 .. } }
它们是单独编写的 class,因为这些方法是实用方法,旨在用于任何地方,而无需在每次要使用这些方法时实际创建一个 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;
}
在上面的例子中,变量可以是任何类型(不一定是nullable
),但实际上它可以是nullable
,因此必须检查是否nullable
。
对于那种情况,我使用了 Nullable.GetUnderlyingType(type)
,因为它是一个实用程序 method.This 是实用程序方法的预期行为,即使它们可以在任何需要的地方重复使用,而无需创建实例,每次你需要他们。