C#链??不同类型的运算符

时间:2015-08-14 17:47:28

标签: c# nullable

我正在为对象实现ToString方法。该方法看起来像:

public override string ToString()
{
    return "E" + (myNum ?? SQLIndex) + STK.ExtraLabel(areaType);
}

其中myNum是一个可以为空的int,而SQLIndex只是一个int。

但权力决定如果SQLIndex尚未设置(如果未设置则为= -1),我们应该将" NEW"而不是-1那里。

所以我将SQLIndex更改为可以为空的int,但是这段代码不起作用,因为我猜测了??运算符不能返回int和string,即使int将被转换为字符串:

public override string ToString()
{
    return "E" + (myNum ?? SQLIndex ?? "NEW") + STK.ExtraLabel(areaType);
}

我目前正在使用三元运算符来实现相同的效果,但出于可读性的考虑,有没有办法使用快捷方式?算子在哪里?

2 个答案:

答案 0 :(得分:5)

您需要将此处的所有表达式转换为单一类型。在这种情况下,string实际上是您想要最终使用的类型,因此在使用{{1}之前,您必须将转换(而不是强制转换)整数转换为字符串}}。您可以使用??将整数转换为字符串:

ToString

答案 1 :(得分:3)

您可以将其中一个操作数强制转换为[Test] public void Foo_Should_Do_Something() { var deviceIdProvider = A.Fake<IDeviceIdProvider>(); A.CallTo(() => deviceIdProvider.GetDeviceId()).Returns("123456"); var foo = new Foo(deviceIdProvider); // test the behavior of Foo... }

object

return "E" + return "E" + (((object)myNum ?? SQLIndex) ?? "NEW") +  STK.ExtraLabel(areaType);

如果你不想要额外的括号。