当前位置: 首页 > 编程语言 > C#

判断反射属性是否可以指定为nullShare

时间:2023-04-11 01:38:58 C#

Determiningwhetherreflectionpropertycanbespecifiedasnull具体来说,我使用反射为每个属性返回PropertyInfo值。我可以从我的“表单”读取或写入每个属性的值,但如果属性定义为“int”,我就不能写入空值,我的程序甚至不应该尝试。如何在不编写switch语句来检查每种可能类型的情况下使用反射来确定是否可以为给定属性分配空值?特别是我想检测像“int”和“int?”这样的盒装类型之间的区别,因为在第二种情况下我确实希望能够写出一个空值。IsValueType和IsByRef之间似乎没有区别。publicclassMyClass{//应该告诉我我不能分配一个nullpublicintAge{get;设置;}公共日期时间出生日期{get;设置;}publicMyStateEnum状态{get;设置;}公共MyCCStructCreditCard{get;set;}//应该告诉我可以分配一个空的公共DateTime吗?死亡日期{得到;设置;}publicMyFamilyClassFamly{get;set;}}请注意,我需要在实际尝试写入值之前很久就确定此信息,因此在SetValue周围使用异常处理不是一种选择。您需要处理空引用和Nullable,因此(相反):boolcanBeNull=!type.IsValueType||(Nullable.GetUnderlyingType(type)!=null);注意IsByRef是不同的,它允许你在使用int和refint/outint之间选择。来自http://msdn.microsoft.com/en-us/library/ms366789.aspxif(type.IsGenericType&&type.GetGenericTypeDefinition()==typeof(Nullable))类型将是您的PropertyInfo.PropertyTypePropertyInfopropertyInfo=。..boolcanAssignNull=!propertyInfo.PropertyType.IsValueType||propertyInfo.PropertyType.IsGenericType&&propertyInfo.PropertyType.GetGenericTypeDefinition()==typeof(Nullable)Marc和Jonas都有一部分来确定泛型类型是否可以分配为null。//一个愚蠢的例子。如果default(T)可以为空,则default(T)将返回null。所以没有理由在这里检查。除了举个例子。publicUAssignValueOrDefault(objectitem){if(item==null){Typetype=typeof(U);//来自通用参数的类型//基本类型,如int、bool、struct,...不能为null//除了int?、bool?、Nullable,...boolnotNullable=type.IsValueType||(type.IsGenericType&&type.GetGenericTypeDefinition()!=typeof(Nullable)));如果(不可空)返回默认(T);}返回(U)项目;注意:在大多数情况下,您可以检查变量是否为空。然后使用默认值(T)。默认返回null,对象是一个类。以上就是C#学习教程:判断反射属性是否可以指定为null的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: