这看起来很愚蠢 - 一定是我!
说我有一个字符串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不起作用?
答案 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
。没有错误,没有问题。
您的周围代码有问题;你的三元表达式很好。