0

次の簡単な switch ステートメントがあります。ご覧のとおり、Any の式はほとんど同じです。

私の質問は:

  1. 同じまたは類似の式が必要になるたびに繰り返す必要がないように、式を再利用する方法はありますか。
  2. Anyで式全体を再利用できない場合、少なくとも「x => x.Question == _question.Question」を再利用できますか?

ありがとう!

switch (_question.DataField)
                {
                    case DataField.FormData:
                    result = Report.ReportDataItems.Any(
                                                  x => x.Question == _question.Question
                                                  && (!string.IsNullOrEmpty(x.FormData)) && Int32.TryParse(x.FormData, out tempVal));
                        break;
                    case DataField.FormData2:
                    result = Report.ReportDataItems.Any(
                                                  x => x.Question == _question.Question
                                                  && (!string.IsNullOrEmpty(x.FormData2)) && Int32.TryParse(x.FormData2, out tempVal));
                        break;
                }
4

1 に答える 1

1

メモリ内の Linq 2 オブジェクトを想定すると、 a を使用しFuncて正しいフィールドを抽出し、残りのクエリを再利用できます。(ここで ReportDataItems の型を呼び出しItemます)

        Func<Item, string> fn;
        switch (_question.DataField)
        {
            case DataField.FormData:
                fn = x => x.FormData;
                break;
            case DataField.FormData2:
                fn = x => x.FormData2;
                break;
            default:
                throw new NotImplementedException();
        }
        result = Report.ReportDataItems.Any(
                                      x => x.Question == _question.Question
                                      && (!string.IsNullOrEmpty(fn(x))) 
                                      &&  Int32.TryParse(fn(x), out tempVal));
于 2013-05-01T18:40:55.187 に答える