在.NET / C#中有没有类似Ruby的Or-Equals?

时间:2009-09-25 15:43:02

标签: c# .net ruby

我正在尝试用C#做一些我在Ruby中一直做的事情,我想知道最接近的是什么。

如果Enum不包含我的整数值的定义,我希望它默认为某个值。我能在一行中做到这一点吗?

Ruby-ish赋值(两个例子):

namedStr = Enum.GetName(typeof(myEnum), enumedInt) || "DEFAULT"

namedStr = Enum.GetName(typeof(myEnum), enumedInt)
namedStr ||= "DEFAULT"

3 个答案:

答案 0 :(得分:10)

namedStr = Enum.GetName(typeof(myEnum), enumedInt) ?? "DEFAULT"

答案 1 :(得分:2)

您可以使用:

namedStr = Enum.IsDefined(tyepof(MyEnum), enumedInt)
    ? ((MyEnum)enumedInt).ToString()
    : "DEFAULT";

...或:

namedStr = Enum.GetName(typeof(MyEnum), enumedInt) ?? "DEFAULT";

我更喜欢第二种选择。

??运算符称为空合并运算符。

答案 2 :(得分:0)

我认为你正在寻找类似于SQL的COALESCE或ISNULL的东西。这是VB中的代码片段:

Public Shared Function Coalesce(Of T)(ByVal value As T, ByVal NullValue As T) As T
    If value Is Nothing Then : Return NullValue
    Else : Return value
    End If
End Function

用过:

myString = Coalesce(Of String)(x, valIfXIsNull)