函数用于检查空字符串属性
本文关键字:字符串 属性 检查 用于 函数 | 更新日期: 2023-09-27 18:11:50
我有一个具有string
属性的对象,例如,一个具有weight和height的Patient对象。
但是当属性为null时,当我尝试使用它时,我的代码失败,因为属性被设置为null。我试图创建一个函数来检查字符串/属性是否为空,如果是,将属性设置为""
。
我知道我可以这样做:
if(string.isNullOrEmpty(patient.weight)) patient.weight = "";
但是我需要代码尽可能的干净,而且我有很多属性,所以我不想手动检查每一个。理想情况下,我想有一个函数,可以采取字符串,(没有失败,即使它是空),并简单地返回值,如果它不是空,或一个""
,如果它是空。
我个人会确保这些属性永远不会为空,这样写:
private string _Name = string.Empty;
public string Name
{
get
{
return _Name;
}
set
{
_Name = value ?? string.Empty;
}
}
然而,您正在寻找的可能是??
操作符,也称为空合并操作符,如上所述,基本上是这个表达式:
x = y ?? z;
的含义与以下相同:
if (y != null)
x = y;
else
x = z;
这也不完全正确。在上面的示例中,y
被求值两次,而??
运算符不会发生这种情况,所以更好的近似是:
var temp = y;
if (temp != null)
x = temp;
else
x = z;
空合并运算符听起来像是你的朋友:
string text = patient.Name ?? "";
你可以写一个扩展方法来做同样的事情,但我认为操作符最终可能会更容易读。
注意,这不会设置属性-但这不是你说你想要的,在句子中:
理想情况下,我想有一个函数,可以接受字符串,(不失败,即使它是空),并简单地返回值(如果它不是空),或一个",如果它是空。
像这样?
public string EmptyIfNull(string value)
{
return value ?? String.Empty;
}
使用空合并运算符:
string s = Patient.Name ?? string.Empty;
如果Patient.Name
为空,那么s
将被设置为空字符串
您可以执行myString ?? string.Empty
,它为您提供字符串或字符串。
当任何对象为空时,您可以使用??
操作符返回您选择的默认值。
string a = null;
a = a ?? "womble";
// a now has the value "womble"
string b = "fluff";
b = b ?? "cabbage";
// b wasn't null, so it still has the value "fluff"
我不确定你所要求的是对你最好的解决方案。如果每次您不想检查String
并返回""
,如果它是null
,我建议您将String
字段初始化为""
。
private String height = "";
代替
private String height;
顺便说一下,您应该将height
和weight
这样的值存储为Double
,而不是String
,除非您有很好的理由不这样做。
欢迎null合并操作符
如果Weight和Height是整数,它们不能为空。如果你的对象是null,你正试图得到高度的重量的一个空对象,那么你的代码是完全错误的。如果字符串为空,那么它将打印一个空字符。
下面这段很优雅:
if ( String.isNullOrEmpty(patient.weight) )
{
//DO STUFF HERE
}
else
{
//DO OTHER STUFF HERE
}
请理解,如果patient为空,你甚至不应该出现在这段代码中。
如果您正在使用isNullOrEmpty,那么执行以下操作是没有意义的。
patient.weight = "";
作者的注意
我想我不明白为什么字符串为空会导致问题。关于初始化时将值设置为空字符串的要点当然是有效的。
你可以把@Jon的想法更进一步,这样你就不必担心使用??无处不在:
像这样定义访问方法:
private String m_name = null;
public String Name
{
get { return m_name ?? String.Empty; }
set { m_name = value; }
}
在您访问Name属性的任何地方,它将为您执行空合并操作符。