如何检查对象是否可为空?

如何检查给定对象是否可为空,换句话说,如何实现以下方法…

bool IsNullableValueType(object o)

{

...

}

编辑:我正在寻找可为空的值类型。我没有想到ref类型。

//Note: This is just a sample. The code has been simplified 

//to fit in a post.

public class BoolContainer

{

bool? myBool = true;

}

var bc = new BoolContainer();

const BindingFlags bindingFlags = BindingFlags.Public

| BindingFlags.NonPublic

| BindingFlags.Instance

;

object obj;

object o = (object)bc;

foreach (var fieldInfo in o.GetType().GetFields(bindingFlags))

{

obj = (object)fieldInfo.GetValue(o);

}

obj现在引用值等于的boolSystem.Boolean)类型的对象true。我真正想要的是一个类型的对象Nullable<bool>

因此,现在作为一项解决方案,我决定检查o是否可为空,并围绕obj创建可为空的包装器。

回答:

有两种可为null的类型- Nullable<T>和引用类型。

乔恩(Jon)纠正了我的意见,即如果很难装箱,则可以键入文字,但是使用泛型则可以:-下面呢。这实际上是测试type

T,但是仅将obj参数用于泛型类型推断(以使其易于调用)- obj尽管没有参数,它的工作原理几乎相同。

static bool IsNullable<T>(T obj)

{

if (obj == null) return true; // obvious

Type type = typeof(T);

if (!type.IsValueType) return true; // ref-type

if (Nullable.GetUnderlyingType(type) != null) return true; // Nullable<T>

return false; // value-type

}

但是,如果您已经将该值装箱到对象变量中,则此方法将无法很好地工作。

Microsoft文档:https : //docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/nullable-

types/how-to-identify-a-nullable-type

以上是 如何检查对象是否可为空? 的全部内容, 来源链接: utcz.com/qa/406869.html

回到顶部