我有一组属性,需要为它们提供默认值。当然,我可以在getter中执行以下操作:
public string MyProp {
get {
if(!string.IsNulOrEmpty(_myProp))
return _myProp;
else
return "Default";
}
但我希望它看起来像
[DefaultValue("Default")]
public string Processes
{
get { return _processes; }
有没有一种很好的方法来处理属性?我花了一些时间来寻找一些属性或方法来做到这一点但却一无所获。
答案 0 :(得分:2)
我会这样做:
private string processes = "default";
public string Processes
{
...
}
答案 1 :(得分:0)
除非使用PostSharp之类的后处理器,否则不能使用属性执行此操作。 DefaultValueAttribute用于通知PropertyGrid(或其他属性浏览器类型控件)该属性的默认值应该是什么,以便它们可以指示何时从该默认值更改它并将其重置为该默认值。
你应该做的是这样的事情:
private const string _processDefault = "Default";
private string _processDefault = _processDefault Default;
public string Process
{
get
{
return _processDefault ;
}
set
{
if (String.IsNullOrEmpty(value))
{
value = _processDefault ;
}
_myProp = value;
}
}
如果您不希望在控件之外设置值,请将setter设为私有。
使用这种方法你仍然可以使用该属性,但是需要编写一些反射代码来获取它的值,你需要通过函数调用初始化私有_myProp
变量,而不是像我一样内联所示。