相关疑难解决方法(0)

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

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

bool IsNullableValueType(object o)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

编辑:我正在寻找可以为空的值类型.我没有记住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);
}
Run Code Online (Sandbox Code Playgroud)

obj现在指的是type bool(System.Boolean)的对象,其值等于true.我真正想要的是一个类型的对象Nullable<bool>

所以现在作为一个解决方法我决定检查o是否可以为空并在obj周围创建一个可空的包装器.

.net c# nullable

191
推荐指数
9
解决办法
9万
查看次数

确定是否可以将反射属性指定为null

我希望自动发现有关提供的类的一些信息,以执行类似于表单输入的操作.具体来说,我使用反射为每个属性返回PropertyInfo值.我可以从我的"表单"中读取或写入每个属性的值,但如果属性被定义为"int",我将无法编写空值,我的程序甚至不能尝试.

如何使用反射来确定是否可以为给定属性分配空值,而无需编写switch语句来检查每种可能的类型?特别是我想检测像"int"和"int?"这样的盒装类型之间的区别,因为在第二种情况下我确实希望能够写出一个空值.IsValueType和IsByRef似乎没有区别.

public class MyClass
{
    // Should tell me I cannot assign a null
    public int Age {get; set;} 
    public DateTime BirthDate {get; set;}
    public MyStateEnum State {get; set;}
    public MyCCStruct CreditCard {get; set;}

    // Should tell me I can assign a null
    public DateTime? DateOfDeath {get; set;}
    public MyFamilyClass Famly {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

请注意,我需要在实际尝试写入值之前很久才确定此信息,因此使用围绕SetValue的异常处理不是一种选择.

.net c# reflection

35
推荐指数
3
解决办法
1万
查看次数

标签 统计

.net ×2

c# ×2

nullable ×1

reflection ×1