最近我发现自己在编写连续调用其他方法的方法,并根据首先返回适当值的方法设置一些值。我一直在做的是用一种方法设置值,然后检查该值,如果它不好,那么我检查下一个。这是最近的一个例子:
private void InitContent()
{
if (!String.IsNullOrEmpty(Request.QueryString["id"]))
{
Content = GetContent(Convert.ToInt64(Request.QueryString["id"]));
ContentMode = ContentFrom.Query;
}
if (Content == null && DefaultId != null)
{
Content = GetContent(DefaultId);
ContentMode = ContentFrom.Default;
}
if (Content == null) ContentMode = ContentFrom.None;
}
如果 id
不在数据库中,GetContent
方法应该返回 null
。这是一个简短的示例,但您可以想象如果有更多选项,这会变得多么笨拙。有更好的方法吗?
最佳答案
空合并运算符可能具有您想要的语义。
q = W() ?? X() ?? Y() ?? Z();
本质上是一样的:
if ((temp = W()) == null && (temp = X()) == null && (temp == Y()) == null)
temp = Z();
q = temp;
也就是说,q是W()、X()、Y()的第一个非空值,或者如果它们都为空值,则为Z()。
您可以链接任意多个。
确切的语义与我勾画的不太一样;类型转换规则很棘手。如果您需要确切的详细信息,请参阅规范。
关于c# - 返回第一个有效的方法,更优雅的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5399091/