Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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# 可为空,请检查默认值_C#_Nullable - Fatal编程技术网

C# 可为空,请检查默认值

C# 可为空,请检查默认值,c#,nullable,C#,Nullable,我正在尝试在使用大量反射的环境中创建一个扩展方法 方法的目的是重新创建默认值在运行时所做的操作 除了那些可为空的类型之外,它对所有类型都很好。甚至?-类型工作正常 我不知道如何才能知道,分配给对象变量的值是否为可空值,而不是常规值类型 在这种情况下,Nullable.GetUnderlyngType方法返回null,但适用于?-类型 我们知道defaultNullable==null。 我的扩展方法在为Nullable赋值0时产生错误的结果,因为0==defaultint 简而言之,我希望你明白

我正在尝试在使用大量反射的环境中创建一个扩展方法

方法的目的是重新创建默认值在运行时所做的操作

除了那些可为空的类型之外,它对所有类型都很好。甚至?-类型工作正常

我不知道如何才能知道,分配给对象变量的值是否为可空值,而不是常规值类型

在这种情况下,Nullable.GetUnderlyngType方法返回null,但适用于?-类型

我们知道defaultNullable==null。 我的扩展方法在为Nullable赋值0时产生错误的结果,因为0==defaultint

简而言之,我希望你明白我在这里要解释的: -如何确定随机对象是否为可空对象而不是int

该方法看起来像这样,为了简单起见,删除了任何缓存 我从这里取了零件


更清楚地说,我不能使用泛型材料…

您不能这样做,因为当您调用该方法时,可为null的结构被装箱为object,并变成null或Int32值。这在前面的回答中有解释:


如果在调用此方法的地方将变量类型化为对象,我认为您无法获得所需的信息-它已经装箱。

您不能这样做,因为当您调用此方法时,可空结构被装箱为对象,并变为null或Int32值。这在前面的回答中有解释:


如果在调用此方法的位置将变量类型化为对象,我认为您无法获得所需的信息-它已经装箱。

当可为空的类型装箱到对象时,它可为空的事实将丢失:它要么变为纯旧int,要么变为纯旧null。如果对象已存储为类型对象,则无法恢复此状态。

如果将可为空的类型装箱到对象,则该类型可为空的事实将丢失:它将变为纯旧int或纯旧null。如果您的对象已存储为类型对象,则无法从以下位置恢复。

发件人:


似乎可以通过执行以下操作来确定类型是否可为null:

public static bool IsDefault<T>( this T obj )
{
    var t = typeof( T );
    var isNullable = t.IsGenericType && t.GetGenericTypeDefinition() == typeof( Nullable<> );
    // ...
}

但是,您的方法必须是泛型的,这样才能起作用。

似乎可以通过执行以下操作来确定类型是否可以为null:

public static bool IsDefault<T>( this T obj )
{
    var t = typeof( T );
    var isNullable = t.IsGenericType && t.GetGenericTypeDefinition() == typeof( Nullable<> );
    // ...
}

但是,您的方法必须是泛型的,才能正常工作。

同样,没有泛型。也不确定trollingAh是否错过了。呵呵,不,stackoverflow自己找到了我的gravatar,我一直懒得去改变它。再一次,没有泛型。也不确定trollingAh是否错过了。呵呵,不,stackoverflow自己找到了我的gravatar,我一直懒得去更改它。@CSharpie我建议根据哪个答案更好来选择-在这种情况下,我同意这是driis的-不是基于一个小时差。@CSharpie我建议根据哪个答案更好来选择-在这种情况下,我同意这是driis的-不是基于一个小的时间差。实际上我的代码不工作,因为参数将其装箱到一个对象中。不是你说的原因。事实上,我的代码不工作,因为参数将其装箱到一个对象中。不是你说的原因。
public static bool IsDefault<T>( this T obj )
{
    var t = typeof( T );
    var isNullable = t.IsGenericType && t.GetGenericTypeDefinition() == typeof( Nullable<> );
    // ...
}