2017-09-29 11 views
1

LINQを使用して文字列を評価し、Regexライブラリを使用して数字またはその他の文字が0の文字列を解析します。ロジック、それはまだどちらかの方法で動作するはずですが、以下は2つのシナリオの例です。ロジックがスワップされた場合にテストが失敗する3進演算でのLINQ演算

この例は、私のテストに合格するものです。ロジックは、それはまだ渡す必要が入れ替わったが、私のテストのカップルが失敗し

return Regex.Split(number, @"[^\d-]") 
      .Select(d => Regex.IsMatch(d, @"[\d-]") ? int.Parse(d.TrimEnd('-')) : 0) 
      .Where(d => d <= 1000).ToList(); 

は...

return Regex.Split(number, @"[^\d-]") 
      .Select(d => Regex.IsMatch(d, @"[^\d-]") ? 0 : int.Parse(d.TrimEnd('-'))) 
      .Where(d => d <= 1000).ToList(); 
+0

でしたの値を返します追加あなたは例外を提供していますか? –

+0

'IsMatch'はあなたの式がどこかに存在することを確認します。だから、 "A1"のような値は、数字があり、数字かダッシュではない値を持っているので、[\ d-]と[[d-]]の両方にマッチします。 – juharr

+0

スローされる例外は解析例外です.dは正しい形式ではありません。 –

答えて

4

問題は、あなたが実際にスワップされていないということですコードの2行目のロジック。完全にロジックを入れ替えるには、あなたはそうのようなif声明を否定する必要があります:

return Regex.Split(number, @"[^\d-]") 
      .Select(d => !Regex.IsMatch(d, @"[^\d-]") ? 0 : int.Parse(d.TrimEnd('-'))) 
      .Where(d => d <= 1000).ToList(); 

Regex.IsMatch(d, @"[^\d-]")!はあなたに有効な数字ではありませんすべてを与えると0

+0

それでした!私の心は混乱している...助けてくれてありがとう! –

+0

ようこそ。 –