2012-02-26 1 views
1

thisブログ記事に記載されている方法を使用してC#パラメータの検証をセットアップしました。私がしようとすると、彼らはより少ないかゼロに等しいかどうかを判断するためにintsための拡張メソッドを追加するとき、しかしジェネリックスでC#メソッドのパラメータを確認する

public static ArgumentEx<T> NotEmptyString<T>(this ArgumentEx<T> arg) where T : class 
{ 
    if (string.IsNullOrWhiteSpace(arg.Value.ToString())) 
    { 
     throw new ArgumentException(string.Format("{0} cannot be empty.", arg.Name)); 
    } 
    return arg; 
} 

:私はそれをすべてのベースに、この拡張メソッドを設定しているstringsいるためすべてが素晴らしい作品このような:

public static ArgumentEx<T> NotZeroOrLess<T>(this ArgumentEx<T> arg) where T : class 
{ 
    if (Convert.ToInt32(arg.Value.ToString()) <= 0) 
    { 
     throw new ArgumentException(string.Format("Please make sure {0} is greater than zero.", arg.Name)); 
    } 
    return arg; 
} 

私は順番に参照型である必要があります試してみて、そうuserId.RequireThat("userId").NotZeroOrLess();

型「int型」のようにそれを呼び出すときに、私はこのエラーを取得します私はnamestringあるようname.RequireThat("name").NotEmptyString();は、正常に動作やって、言ったようにジェネリック型またはメソッド

に パラメータ「T」としてそれを使用します。私はgenericのタイプを次のように指定しようとしました:

userId.RequireThat<int>("userId").NotZeroOrLess(); 

私は同じエラーが発生します。私はジェネリック医薬品にあまり精通していないと認めなければならない。誰かがこのエラーが発生している理由を説明することはできますか?早めにありがとう。

答えて

1

延長方法public static ArgumentEx<T> NotZeroOrLess<T>(this ArgumentEx<T> arg) where T : classからwhere T : classを削除しようとしましたか?

+0

それはそうしています。トーマスが投稿したリンクを読んだら、これらのことをより完全に理解しています。しかし、これを取り除くことで、将来私が気づくべき問題が生じるでしょうか? –

関連する問題