我有下面的C#代码使用条件运算符?避免如果条件
public Config(SConfig[] c)
{
GpsdIp = c[0].Ip;
GpsdPort = c[0].Port;
CompassIp = c[1]?.Ip;
CompassPort = c[1]?.Port;
}
CompassPort = c[1]?.Port;
被给予警告(red carpet
) 不能implictly转换int?
到int
。 Explict conversion exists are you missing a cast?
我在这里的意图是,如果SConfig[] c
包含一个元素,它应该分配给GpsdIp
和GpsdPort
。如果它包含两个元素,则第二个元素应该被视为CompassIp
和CompassPort
。如果可以的话,我真的很想避免和if condition
。
为什么你想避免'if'?如果没有第二个元素,你期望'CompassIp/Port'能保持什么值? –
下面的答案适合您的目的。只是为了澄清错误的原因。当你使用'c [1] ?. ip''时,你正在为右手边变量赋一个整数,但如果它不存在,那么它将赋值NULL,因为你的变量没有准备好。既然你有'int CompassIp'因此这个错误。如果你想使用你的原始代码,你应该有'int? CompassIp“,即CompassIp应该是可为空的整数,而不仅仅是整数。是的,甚至在你可以用NULL值做任何事情之前,索引异常都会出现在那里。 –