函数用于检查空字符串属性

本文关键字:字符串 属性 检查 用于 函数 | 更新日期: 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;
顺便说一下,您应该将heightweight这样的值存储为Double,而不是String,除非您有很好的理由不这样做。

欢迎null合并操作符

如果WeightHeight是整数,它们不能为空。如果你的对象是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属性的任何地方,它将为您执行空合并操作符。