我在类似的属性中有一个属性
public String fontWeight { get; set; }
我希望它默认为"Normal"
有没有办法以“自动”样式而不是以下
执行此操作public String fontWeight {
get { return fontWeight; }
set { if (value!=null) { fontWeight = value; } else { fontWeight = "Normal"; } }
}
答案 0 :(得分:13)
是的,你可以。
如果您正在寻找类似的内容:
[DefaultValue("Normal")]
public String FontWeight
{
get;
set;
}
谷歌搜索“使用.NET进行面向方面编程”
..如果这样做太过分了,你可以这样做:
private string fontWeight;
public String FontWeight {
get
{
return fontWeight ?? "Normal";
}
set {fontWeight = value;}
}
答案 1 :(得分:10)
不,自动属性只是一个普通的getter和/或setter和一个后备变量。如果要在属性中放置任何类型的逻辑,则必须使用常规属性语法。
您可以使用??
运算符使其缩短一点,但是:
private string _fontWeight;
public String FontWeight {
get { return _fontWeight; }
set { _fontWeight = value ?? "Normal"; }
}
请注意,setter不用于初始化属性,因此如果未在构造函数中设置值(或在变量声明中指定值),则默认值仍为null。您可以在getter中进行检查,而不是解决这个问题:
private string _fontWeight;
public String FontWeight {
get { return _fontWeight ?? "Normal"; }
set { _fontWeight = value; }
}
答案 2 :(得分:2)
您需要使用支持字段。
private string fontWeight;
public String FontWeight
{
get { String.IsNullOrEmpty(fontWeight) ? "Normal" : fontWeight;}
set {fontWeight = String.IsNullOrEmpty(value) ? "Normal" : value;}
}
答案 3 :(得分:2)
您需要使用支持字段并将其初始化为默认值
private String fontWeight = "Normal";
public String FontWeight
{
get { return fontWeight; }
set { fontWeight = value; }
}
或者,保留auto属性并在构造函数中调用setter
public constructor()
{
FontWeight = "Normal";
}
public String FontWeight { get; set; }
答案 4 :(得分:1)
一种方法是使用this answer中详述的PostSharp来解决类似的问题。
答案 5 :(得分:1)
您可以使用DefaultValue属性:
[DefaultValue("Normal")]
public string FontWeight { get; set; }
虽然它注意到了
DefaultValueAttribute不会导致使用属性的值自动初始化成员。您必须在代码中设置初始值。
因此您可以将它与构造函数中的初始化结合使用,也可以通过支持字段和默认处理结合使用。
答案 6 :(得分:0)
你需要一个像这样的变量:
string fontWeight;
public string FontWeight
{
get
{
if (string.IsNullOrEmpty(fontWeight))
fontWeight = "Normal";
return fontWeight;
}
set { fontWeight = value; }
}
或使用Constructer
设置初始值:
class FontClass
{
public string FontWeight { get; set; }
public FontClass()
{
FontWeight = "Normal";
}
}