14

私はこれを機能させようとしていますが、どういうわけか私の手に負えなくなります...私が割り当てたタイプにnullまたは空をチェックできるようにしたいです。

元:

int i =0;
string mystring = "";

var reult  = CheckNullOrEmpty(10) // passing int
var result 1  = CheckNullOrEmpty(mystring) // passing string 

 public bool CheckNullOrEmpty<T>(T value)
 {
    // check for null or empty for strings
    // check for null i.e. 0 for int 

 }

誰かがこれを手伝ってくれますか..ジェネリックがこの単純な方法でどのように機能するかを理解しようとしています。

4

5 に答える 5

30
public static bool CheckNullOrEmpty<T>(T value)
{
     if (typeof(T) == typeof(string))
        return string.IsNullOrEmpty(value as string);

     return value == null || value.Equals(default(T));
}

使い方:

class Stub { }

bool f1 = CheckNullOrEmpty(""); //true
bool f2 = CheckNullOrEmpty<string>(null); //true
bool f3 = CheckNullOrEmpty(0); //true
bool f4 = CheckNullOrEmpty<Stub>(null);  //true
于 2013-05-15T09:16:03.617 に答える
2

あなたはに対してチェックすることができますdefault(T);

 public bool CheckNullOrEmpty<T>(T value)
 {
      return value == default(T);
 }

詳細については、http: //msdn.microsoft.com/en-us/library/xwth0h0d.aspxを参照してください。

于 2013-05-15T09:13:00.200 に答える
1

default() を使用できます-

例えば:

if(value != default(T))

MSDN から:

パラメーター化された型 T の変数 t が与えられた場合、ステートメント t = null は、T が参照型であり、t = 0 が数値型に対してのみ機能し、構造体に対しては機能しない場合にのみ有効です。解決策は、default キーワードを使用することです。これは、参照型に対して null を返し、数値型に対してゼロを返します。構造体の場合、値型か参照型かに応じて、構造体の各メンバーをゼロまたは null に初期化して返します。

http://msdn.microsoft.com/en-us/library/xwth0h0d(v=vs.80).aspx

于 2013-05-15T09:10:44.893 に答える
1

実装は型によって異なるため、CheckNullOrEmptyそのチェックをジェネリック関数として持つことはできません。

Nullableただし、値型を使用する場合は、次を使用できますGetValueOrDefault()

int? i = 0;

var result = i.GetValueOrDefault(10);

stringの場合は、拡張メソッドを用意するだけです:

public static string GetValueOrDefault(this string item, string defaultValue = "")
{
    return !string.IsNullOrWhiteSpace(item) ? item : defaultValue;
}

次に、次のことができます。

string i = null;
string mystring = "";

var result  = i.GetValueOrDefault(mystring);
于 2013-05-15T09:12:47.083 に答える