空属类型 ?
2007年8月,xx项目进行三个月后,北京同事撤回总部,自己被调到北京开发c/s模块的一些功能.
包括 维护建议,手工派单(9月份将要开发wpf的拓补监控) ,在此处,记录下c/s下的某些知识和自己碰到的问题和解决方法.
1:空属类型
xx系统,用到了领域模型等概念.在其中某个对象模型的设计中,设计人员用到了 一个 很怪异的东西,如下代码:
/// <summary>
/// 告警产生时间,对应消息字段event_time
/// </summary>
[PropertyAlias("event_time")] //这个地方也是个知识点,还没看懂,以后在记录
public DateTime? RaiseTime //请注意这个地方的问号
{
get
{
RaiseAlarmContext context = mAlarm.RaiseAlarmContext;
if (context != null)
return context.OccurTime;
else
return null;
}
}
这个地方的问号,很怪异,问了下同事,才知道这个叫 空属类型.
那什么是空属类型呢?
举个例子:
在c#中,定义一个 值类型 DateTime tempTime;
值类型,如果没有初始化值,系统都会有个默认值,如果在程序中没有对这个值类型赋值而要存入数据库,相信数据库中的结果并不是我们希望的空,而是一个具体的值.
空属类型,解决了这个值类型可以为空的问题.
引用别人的解释:(地址:http://dotnet.chinaitlab.com/CSharp/722415.html)
空属类型简介
空属类型允许一个值类型具有“空值”意义,从而方便很多场合的运算,如数据库中的空字段。
空值类型演示:
int i = 123;
int? x = i;
double? y = x;
int? z = (int?)y;
空属类型的几个注意点
空属类型实际上是一个泛型类型
System.Nullable。空属类型的基础类型就是System.Nullable的类型参数,其中T必须为值类型。
空属类型如果值不为空,可以运用同样的基础类型所具有的运算,如:+、 -、 *、 /
空属类型的HasValue属性用来判断类型是否为空,如果不为空,则可以通过Value属性来获取它的基础类型的值。
2:使用反射获取对象的属性的属性名
方法一:
private PropertyInfo[] Showproperty(object a)
{
Type TpA = a.GetType();
PropertyInfo[] propertyInfo = TpA.GetProperties();
return propertyInfo;
}
方法二:
Attribute[] propertyAttributes = new Attribute[] { DesignOnlyAttribute.No };
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(a, propertyAttributes);