日期:2014-05-18  浏览次数:20504 次

.net特性一问
经常写一些属性的时候都要判断属性的值是不是为空
比如
public string name
{
set{
  if(value==null)
  {//...}
  else name =value;
}
}
我现在不想写这些判断,不知道能不能这样

[myAttribute("")]//指示此属性不能为空,为空就抛出异常
public string name
{
  set
  {
  name=value;
  }
}


请问大家这样做得到吗,具体怎么做??


------解决方案--------------------
不能。但你可以使用snippet来简单你的代码输入的工作量。
------解决方案--------------------
Attribute不会对代码本身构成什么影响,而是其它程序在使用它时产生影响。
比如:你可以这样写一个Attribute
[NotNullProperty()]
public string name{get;set;}

然后当你在使用某一个类的某一个属性时先执行一次检查是否有这个Attribute.
 如果有,那么执行一次:
if(valueString!=null)
xxx.name = valueString;

但你无法通过这个Attribute强制其它程序来执行这样的操作。
------解决方案--------------------
C# code


        public string name
        {
            set
            {
                if (string.IsNullOrEmpty(value))//or value==null
                {
                    throw new NullReferenceException();
                }
                else
                {
                    name = value;
                }
            }
        }

------解决方案--------------------
这样做的意义不大吧。
------解决方案--------------------
特性感觉主要像做一个特定的标记一样

别的地方可以想办法看到这个标记,但是这个标记本身没有限定的作用

------解决方案--------------------
“[]”本身没有任何意义的,就跟html标记中,你随便加些自定义的属性,然后自己再获取其值
------解决方案--------------------
假设你的属性名称为:EditTime,
你可以写:
[My(EditTime = DateTime.Now)]
也可以写成性:
[MyAttribue(EditTime = DateTime.Now)]