好的,所以我是C Sharp的新手,我有一个函数调用可能会发送空值。我想确保如果它为null,那么我应该将那些null设置为空字符串。以下是我尝试过的,但是我认为必须有一种优雅的方法来实现这一点。
public static Concat ()
{
// imagine x = null and y = null
Abc( x, y);
}
public static Abc ( string x , string y)
{
// blah blah
x = x ?? "";
y = y ?? "";
efg( x, y);
}
我调查了Solution,但我无法理解。我可以在Abc arguments/parameter
本身做些什么。我的意思是
public static Abc ( string x Can I do something here , string y Can I do something here)
{
// blah blah
x = x ?? "";
y = y ?? "";
efg( x, y);
}
答案 0 :(得分:5)
我认为必须有一种优雅的方式来实现这一目标。
有??
运算符。你找到了。对你好。
Abc ( string x Can I do something here
你可以说
public static Abc(string x = "", string y = "")
现在你可以称之为
Abc("a", "b);
Abc("a"); // actually calls Abc("a", "")
Abc(); // actually calls Abc("", "")
但这不会改变传入null时的行为。它允许您省略参数,而不是更改null参数的值。
答案 1 :(得分:0)
不幸的是,C#本身不支持编译时检查,以强制引用类型的非空值,包括string
。
您可以提供默认值,例如void DoSomething(string x = "")
,但这并不妨碍某人用空值覆盖它。
答案 2 :(得分:0)
小改进:
UTF-8
与你已经没有太大的不同。如果public static Abc ( string x , string y) => efg(x ?? "", y ?? "");
不是?
,则someObject?.SomeProperty
运算符(如SomeProperty
)会返回someObject
的值。这不适用于您的示例。