[英]How to find out if a property is an auto-implemented property with reflection?
[英]How to initialize a string to “” when using auto-implemented property
当使用自动实现的属性时,如何将字符串设置为“”:
public string Blah {get; set;}
当您使用这样的自动属性时 ,属性类型的默认值是值,除非您在其他位置初始化它,就像在构造函数中一样:
public class Person
{
public string Name { get; set; }
public Person()
{
Name = string.Empty;
}
}
但是,如果您的自动属性具有公共设置器(如上所示),那么您仍然可以向其他人设置Name为null
,这可能会导致一些问题。
我可以看到两种解决方案,具体取决于您的背景。
首先,将您的自动属性更改为私有setter:
public class Person
{
public string Name { get; private set; }
public Person()
{
Name = string.Empty;
}
}
这可以防止其他任何人改变属性。 如果这不方便,你可以使用完整的属性,并利用??
( null-coalescing )运算符以防止空值:
public class Person
{
public string Name
{
get { return mName; }
set { mName = value ?? string.empty; }
}
public Person()
{
Name = string.Empty;
}
private string mName;
}
您表示您“正在使用它进行强类型视图,因此我甚至没有构造函数”。 如果您无权访问构造函数,则听起来您可能不应该使用自动实现的属性。
你可以使用这个属性......
Blah = String.Empty;
...但我很确定这是默认的(字符串)。
对不起,默认(字符串)确实为空。 但设置属性工作得很好。 :)
在(无参数)构造函数中设置所有默认值...
public MyClass()
{
Blah = string.Empty;
}
如果你缺少一个构造函数,也许可以考虑采用另一种方式
private string Blah = "";
public string Bleh {
get { return Blah; }
set { Blah = value; }
}
只是提醒将字符串初始化为“”不是一个好习惯。 在获取值之前,字符串应保持为null。
只是为了挑战你的假设,为什么有一个null是一个问题? 在某些情况下,这是一个非常有意义的状态。 使用类的属性时,可以始终使用string.IsNullOrEmpty(p.Name)测试。
我发现迟钝的类比有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.