C# 函数检查空字符串属性?
我有一个具有C# 函数检查空字符串属性?,c#,properties,null-coalescing,C#,Properties,Null Coalescing,我有一个具有string属性的对象,例如,一个具有重量和高度的患者对象 但是当属性为null时,我的代码在尝试使用它时失败,因为属性设置为null。我正在尝试创建一个函数来检查字符串/属性是否为null,如果为null,请将属性设置为” 我知道我可以做到这一点: if(string.isNullOrEmpty(patient.weight)) patient.weight = ""; 但是我需要代码尽可能干净,并且我有很多属性,所以我不想手动检查每一个属性。理想情况下,我希望有一个可以接受字符
string
属性的对象,例如,一个具有重量和高度的患者对象
但是当属性为null时,我的代码在尝试使用它时失败,因为属性设置为null。我正在尝试创建一个函数来检查字符串/属性是否为null,如果为null,请将属性设置为”
我知道我可以做到这一点:
if(string.isNullOrEmpty(patient.weight)) patient.weight = "";
但是我需要代码尽可能干净,并且我有很多属性,所以我不想手动检查每一个属性。理想情况下,我希望有一个可以接受字符串的函数(即使它为null也不会失败),如果它不为null,只返回值,如果它为null,则返回一个“
”
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 text = patient.Name ?? "";
您可以编写一个扩展方法来做同样的事情,但我认为操作符最终可能更具可读性
请注意,这不会设置属性,但这不是您在以下句子中所说的您想要的:
理想情况下,我希望有一个可以接受字符串的函数(即使它为null也不会失败),并且只返回值(如果它不是null),或者如果它为null则返回一个“”
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 text = patient.Name ?? "";
您可以编写一个扩展方法来做同样的事情,但我认为操作符最终可能更具可读性
请注意,这不会设置属性,但这不是您在以下句子中所说的您想要的:
理想情况下,我希望有一个可以接受字符串的函数(即使它为null也不会失败),并且只返回值(如果它不是null),或者如果它为null则返回一个“”
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"
这正是上面的代码所做的。类似的事情
public string EmptyIfNull(string value)
{
return value ?? String.Empty;
}
像这样的
public string EmptyIfNull(string value)
{
return value ?? String.Empty;
}
使用空合并运算符:
string s = Patient.Name ?? string.Empty;
因此,如果
Patient.Name
为空,则s
将设置为空字符串。使用空合并运算符:
string s = Patient.Name ?? string.Empty;
因此,如果
Patient.Name
为空,那么s
将被设置为空字符串。您可以执行myString??string.Empty
,它为您提供字符串,如果为空,则为string.Empty。您可以执行myString??string.Empty
,它为您提供字符串,如果为null,则为string.Empty。向…问好。向…问好。就我个人而言,我将通过这样编写属性来确保这些属性永远不能为null:
private string _Name = string.Empty;
public string Name
{
get
{
return _Name;
}
set
{
_Name = value ?? 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"
private String m_name = null;
public String Name
{
get { return m_name ?? String.Empty; }
set { m_name = value; }
}
但是,您要查找的可能是?
运算符,也称为,如上所述,基本上是以下表达式:
x = y ?? z;
表示与此相同:
if (y != null)
x = y;
else
x = z;
这也不完全正确。在上面的示例中,对y
求值两次,而?
运算符不会出现这种情况,因此更好的近似值是:
var temp = y;
if (temp != null)
x = temp;
else
x = z;
就我个人而言,我会这样写,以确保这些属性永远不会为空:
private string _Name = string.Empty;
public string Name
{
get
{
return _Name;
}
set
{
_Name = value ?? string.Empty;
}
}
private String m_name = null;
public String Name
{
get { return m_name ?? String.Empty; }
set { m_name = value; }
}
但是,您要查找的可能是?
运算符,也称为,如上所述,基本上是以下表达式:
x = y ?? z;
表示与此相同:
if (y != null)
x = y;
else
x = z;
这也不完全正确。在上面的示例中,对y
求值两次,而?
运算符不会出现这种情况,因此更好的近似值是:
var temp = y;
if (temp != null)
x = temp;
else
x = z;
当任何对象为空时,可以使用返回您选择的默认值
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 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"
如果Weight和Height是整数,则它们不能为空。如果您的对象为null,并且您试图获取空对象的高度,重量,那么您的代码就是错误的。如果字符串为空,则它将打印空字符 以下是非常优雅的:
if ( String.isNullOrEmpty(patient.weight) )
{
//DO STUFF HERE
}
else
{
//DO OTHER STUFF HERE
}
请理解,如果patient为空,您甚至不应该出现在这段代码中
如果您使用的是isNullOrEmpty,那么执行以下操作是毫无意义的
patient.weight = "";
作者说明
我想我不明白字符串为null会导致问题的原因。初始化时将值设置为空字符串的要点当然是有效的。如果Weight和Height是整数,则它们不能为空。如果您的对象为null,并且您试图获取空对象的高度,重量,那么您的代码就是错误的。如果字符串为空,则它将打印空字符 以下是非常优雅的:
if ( String.isNullOrEmpty(patient.weight) )
{
//DO STUFF HERE
}
else
{
//DO OTHER STUFF HERE
}
请理解,如果patient为空,您甚至不应该出现在这段代码中
如果您使用的是isNullOrEmpty,那么执行以下操作是毫无意义的
patient.weight = "";
作者说明
我想我不明白字符串为null会导致问题的原因。初始化时将值设置为空字符串的要点当然是有效的。我不确定您所要求的是最适合您的解决方案。如果每次您不想检查
字符串
并在为空时返回”
,我建议您将字符串
字段初始化为”
而不是
private String height;
顺便说一下,您应该将高度
和重量
等值存储为双精度
,而不是字符串
,除非您有充分的理由不这样做。我不确定您所要求的是最适合您的解决方案。如果每次您不想检查字符串
并在为空时返回”
,我建议您将字符串
字段初始化为”
而不是
private String height;
顺便说一下,您应该将height
和weight
等值存储为Double
而不是String