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);
如果您不想要额外的括号。
我正在为一个对象实现一个 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);
如果您不想要额外的括号。