1

这似乎很愚蠢——一定是我!

假设我有一个字符串filter["size]" = "g1g",实际上是“greater”“1”“gb”

所以

我做了一个测试,看看“第一个”字符是否是一个字符,并计算出它更大

first 和 last 都是布尔值。

然后我将 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

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

因此,与可能有很多更好的方法无关,谁能告诉我为什么这些嵌套的内联 if 不起作用?

4

2 回答 2

4

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

条件运算符 ?: 在您的子字符串中不完整

我会为你分解

Substring(
           first
               ? 1
               : 0,
           last 
               ? (first ? x-2 : x-1 )
               : [something]  // this is the bit you're missing
);
于 2012-10-02T09:30:30.233 回答
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. 没有错误,没有问题。

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

于 2012-10-02T12:07:25.113 回答