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

C# chain ?? operator for different types

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

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

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

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

所以我将 SQLIndex 更改为可为 null 的 int,但是这段代码不起作用,因为我猜是 ??运算符不能 return 同时使用 int 和 string,即使 int 会被转换为字符串:

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

我目前正在使用三元运算符来实现相同的效果,但是为了便于阅读,有什么方法可以使用快捷方式吗??接线员在吗?

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

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

您可以将其中一个操作数转换为 object:

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

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

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