函数检查空字符串/属性?

时间:2011-10-19 20:08:00

标签: c# visual-studio-2008

我有一个带属性(字符串)的对象。 例如:患者体重,身高。

但是当属性为null时,我尝试使用它时代码失败,因为该属性设置为null。所以我要做的是创建函数来检查字符串/属性是否为null,如果是,则将该属性设置为“”。

我知道我可以做其中一件事: if(string.isNullOrEmpty(patient.weight))patient.weight =“”;

但我需要代码尽可能干净,而且我有很多属性,所以我不想手动检查每一个。理想情况下,我希望有一个可以接受字符串的函数(即使它为null也不会失败),只返回值(如果它不是null),或者返回“”,如果它是null。

任何人都可以给我一个线索:(?

10 个答案:

答案 0 :(得分:5)

就个人而言,我会确保这些属性永远不会为null,方法是这样写:

private string _Name = string.Empty;
public string Name
{
    get
    {
        return _Name;
    }
    set
    {
        _Name = value ?? string.Empty;
    }
}

但是,您正在寻找的可能是??运算符,也称为null-coalescing operator,如上所用,基本上就是这个表达式:

x = y ?? z;

与此相同:

if (y != null)
    x = y;
else
    x = z;

这也不完全正确。在上面的示例中,y被评估两次,??运算符不会发生这种情况,因此更好的近似值是这样的:

var temp = y;
if (temp != null)
    x = temp;
else
    x = z;

答案 1 :(得分:2)

null coalescing operator听起来像是你的朋友:

string text = patient.Name ?? "";

可以编写一个扩展方法来做同样的事情,但我认为运营商可能最终会更具可读性。

请注意,这不会设置属性 - 但这不是你想要的,无论如何,在句子中:

  

理想情况下,我想要一个可以接受字符串的函数,(即使它为null也不会失败),只返回值(如果它不是null),如果它为null则返回“”

这正是上面的代码所做的。

答案 2 :(得分:2)

这样的东西?

public string EmptyIfNull(string value) 
{
    return value ?? String.Empty;
}

答案 3 :(得分:2)

使用null-coalescing运算符:

string s = Patient.Name ?? string.Empty;

因此,如果Patient.Name为空,则s将设置为空字符串。

答案 4 :(得分:2)

你可以做myString ?? string.Empty,它给你字符串,或者string.Empty,如果它是null。

答案 5 :(得分:1)

当任何对象为空时,您可以使用?? operator返回您选择的默认值。

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"

答案 6 :(得分:1)

我不确定您所问的是最适合您的解决方案。如果您每次都要查看String并返回"",如果是null,我建议您将String字段初始化为{{1} }}

""

而不是

private String height = "";

顺便说一句,您应该将private String height; height等值设置为weight而不是Double,除非您有充分理由不这样做。

答案 7 :(得分:0)

null coalescing operator打个招呼。

答案 8 :(得分:0)

如果重量高度是整数,则它们不能为空。如果您的对象 null ,并且您尝试获取空对象的权重高度,则您的代码完全错误。如果字符串为null,则它将打印一个空字符。

以下是非常优雅的:

if ( String.isNullOrEmpty(patient.weight) )
{
//DO STUFF HERE
}
else
{
//DO OTHER STUFF HERE
}

请理解患者是否为空,您甚至不应该在此代码块中。

如果您使用 isNullOrEmpty ,那么执行以下操作毫无意义。

patient.weight = "";

作者注意

我想我不明白字符串为null会导致问题的原因。初始化时将值设置为空字符串的要点当然是有效的。

答案 9 :(得分:0)

你可以从@Jon更进一步的想法,所以你不必担心使用?到处:

定义您的访问方法:

private String m_name = null;
public String Name
{
    get { return m_name ?? String.Empty; }
    set { m_name = value; }
}

在您访问Name属性的任何地方,它都会为您执行空合并运算符。