2016-09-08 4 views
-1

複数の関数が検証を実行するために呼び出されるサンプルコードを見て、いずれかの検証に失敗した場合は呼び出し環境にfalseを返し、c#複数の検証と戻りエラーメッセージを述語で実行する方法

検証が失敗するとエラーメッセージが返され、すべての検証が成功した場合に空の文字列が返されるようにルーチンをカスタマイズする方法。私のコードを見て、私が述語でそれを望む方法をカスタマイズするのを助けます。

 private static Predicate<string>[] _checks = new Predicate<string>[] 
     { 
      ValidationSeries.IsAtLeastFiveChars, 
      ValidationSeries.HasASpace, 
      ValidationSeries.HasNoLeadingSpace, 
      ValidationSeries.HasNoTrailingSpace 
     }; 


private void button1_Click(object sender, EventArgs e) 
{ 
    bool doesPassAllChecks = _checks.All(c => c("Hello Test")); 
} 

    public static class ValidationSeries 
    { 
      public static bool IsAtLeastFiveChars(string text) 
      { 
       return text.Length >= 5; 
      } 

      public static bool HasASpace(string text) 
      { 
       return text.Contains(' '); 
      } 

      public static bool HasNoLeadingSpace(string text) 
      { 
       return !text.StartsWith(" "); 
      } 

      public static bool HasNoTrailingSpace(string text) 
      { 
       return !text.EndsWith(" "); 
      } 
    } 

助けを求める。ありがとう

+0

@OndrejTucny申し訳ありませんが......達成する方法。あなたが完了すると思うようにサンプルコードを投稿します。 –

+1

あなた自身で実際に問題を解決するために努力する必要があります。残念ながら、これはコード作成サービスではありません。 – Missy

+0

@OndrejTucny私のポストに私の答えを見て、私は正しい方向に行くと言いますか? –

答えて

0

このように解決しました。

public static class ValidationSeries 
    { 
     private static Predicate<string>[] _checks = new Predicate<string>[] 
     { 
       ValidationSeries.IsAtLeastFiveChars, 
       ValidationSeries.HasASpace, 
       ValidationSeries.HasNoLeadingSpace, 
       ValidationSeries.HasNoTrailingSpace 
     }; 

     public static bool Check(string s, ICollection<string> failedPredicateNames) 
     { 

      var failed = false; 
      foreach (var check in _checks) 
      { 
       if (!check(s)) 
       { 
        failedPredicateNames.Add(check.Method.Name); 
        failed = true; 
       } 
      } 
      return !failed; 
     } 

     public static bool IsAtLeastFiveChars(string text) 
     { 
      return text.Length >= 5; 
     } 

     public static bool HasASpace(string text) 
     { 
      return text.Contains(" "); 
     } 

     public static bool HasNoLeadingSpace(string text) 
     { 
      return !text.StartsWith(" "); 
     } 

     public static bool HasNoTrailingSpace(string text) 
     { 
      return !text.EndsWith(" "); 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var failures = new List<string>(); 
      if (!ValidationSeries.Check(" Hello World", failures)) 
      { 
       foreach (var f in failures) 
       { 
        Console.WriteLine(f); 
       } 
      } 
     } 
関連する問題