1

これはばかげているようです - 私に違いない!

filter["size]" = "g1g"実際には「greater」「1」「gb」という文字列があるとします

それで

「最初の」文字が文字であるかどうかを確認するテストを行い、それが大きいかどうかを調べました

first と last はどちらもブール値です。

次に、x (stroppy になっていたので) を文字列である filter["size"] の長さに設定します。

しかし、途中で最後の数字をコピーするようになりました。

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

そして、ネストされたインラインifが好きではありません..

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

そして、ネストされたインラインifが好きではありません..

条件演算子 ?: は部分文字列で完全ではありません

私はあなたのためにそれを分解します

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 に答える