有沒有更簡單的方法來做到這一點?有沒有一種更簡單的方法在C#中做到這一點? (null-coalescing type question)
string s = i["property"] != null ? "none" : i["property"].ToString();
通知它和空聚結(??)之間的區別在於,非空值(Δθ的運算的第一操作數)被返回之前訪問。
有沒有更簡單的方法來做到這一點?有沒有一種更簡單的方法在C#中做到這一點? (null-coalescing type question)
string s = i["property"] != null ? "none" : i["property"].ToString();
通知它和空聚結(??)之間的區別在於,非空值(Δθ的運算的第一操作數)被返回之前訪問。
請嘗試以下
string s = (i["property"] ?? "none").ToString();
如果索引返回object
:
(i["property"] ?? (object)"none").ToString()
或者只是:
(i["property"] ?? "none").ToString()
如果string
:
i["property"] ?? "none"
替代品的樂趣。
void Main()
{
string s1 = "foo";
string s2 = null;
Console.WriteLine(s1.Coalesce("none"));
Console.WriteLine(s2.Coalesce("none"));
var coalescer = new Coalescer<string>("none");
Console.WriteLine(coalescer.Coalesce(s1));
Console.WriteLine(coalescer.Coalesce(s2));
}
public class Coalescer<T>
{
T _def;
public Coalescer(T def) { _def = def; }
public T Coalesce(T s) { return s == null ? _def : s; }
}
public static class CoalesceExtension
{
public static string Coalesce(this string s, string def) { return s ?? def; }
}
+1發佈時間。然而,像這樣的方法存在的一個問題是某些運算符('&&','||','??','?:'等)是懶惰的。在這種情況下,Coalesce函數的參數被熱切地評估。這裏沒關係,但可能。想象一下,「無」真的是'Foo(x)'。這可以通過使用lambda/func來解決,但C#語法不會進行任何神奇/自動提升,因此可能會很快變得麻煩。 – 2011-04-11 19:59:07
+1在這種特殊情況下,字符串'已經正確加寬沒有演員。 (雖然沒有指定'i [「property」] * *是*對象...) – 2011-04-11 19:42:31