嵌套条件运算符?

时间:2012-10-02 09:25:46

标签: c#

这看起来很愚蠢 - 一定是我!

说我有一个字符串filter["size]" = "g1g"这实际上是“更大”“1”“gb”

所以

我做了一个测试,看看“第一个”角色是否是一个角色,然后计算出更大的角色 我做了一个测试,看看“最后”字符是否是一个字符,并计算出它的gb,或mb,或其他什么

第一个和最后一个都是布尔值。

然后我将x(因为我变得粗糙)设置为filter [“size”]的长度,这是一个字符串。

但是,我来复制中间的最终数字。

Int64.Parse(filter["size"].Substring(first?1:0,last?(first?x-2:x-1):x));

它不喜欢嵌套的内联ifs ..

Substring(first?1:0,last?(first?x-2:x-1));抱怨它错过了:,这是对的,但是你添加它的那一刻就抱怨了

Error   1   The best overloaded method match for 'string.Substring(int, int)' has some invalid arguments

我开始认为我应该用regexpr解析它,但现在我很好奇为什么这不起作用。

所以,无关紧要的可能有很多更好的方法,谁能告诉我为什么这些嵌套的内联ifs不起作用?

2 个答案:

答案 0 :(得分:3)

  

它不喜欢嵌套的内联ifs ..

条件运算符?:在子字符串

中未完成

我会为你分解

Substring(
           first
               ? 1
               : 0,
           last 
               ? (first ? x-2 : x-1 )
               : [something]  // this is the bit you're missing
);

答案 1 :(得分:2)

你的代码是完全可编辑的正如你所描述的,如果可怕的可读性。填写你的空白,我试过这个:

int x = 6;
bool first = false;
bool last = false;
var filter = new Dictionary<string, string>();
filter.Add("size", "12345697");
var result = Int64.Parse(filter["size"].Substring(first?1:0,last?(first?x-2:x-1):x));

此代码会将result设置为123456。没有错误,没有问题。

您的周围代码有问题;你的三元表达式很好。