0

パラメータの値をチェックする関数を作成したかったのですが、null の場合はパラメータの型に基づいて値を設定し、それ以外の場合は値をそのまま返す必要があります。

ここで私が試したこと。

public static T ConvertNull<T>(T obj)
{
    if (String.IsNullOrEmpty(obj.ToString()))
    {
        HttpContext.Current.Response.Write("COMING IN");
        if (typeof(T) == typeof(Int32))
        {
            return (T)Convert.ChangeType(0, typeof(T));
        }
        else if (typeof(T) == typeof(DateTime))
        {
            return (T)Convert.ChangeType(DateTime.Now, typeof(T));
        }
        else
        {
            return (T)Convert.ChangeType(String.Empty, typeof(T));
        }
    }
    else
    {
        HttpContext.Current.Response.Write("ELSE");
        return obj;
    }
}

しかし問題は、常に ELSE セクションに入り、ジャンク値を返すことです。

上記の関数の何が問題なのか、誰か教えてください。

4

2 に答える 2

0

null である場合に何らかの値に置き換えたい null 許容型があり、null でない場合に既存の値を返す場合、これを行う既存の演算子、??演算子:

int? i = null;  //note of course that a non-nullable int cannot be null
int n = i ?? 0; //equals zero

string s = null;
string s2 = s ?? ""; //equals an empty string

string s3 = "hi";
string s4 = s3 ?? ""; //equals "hi"

便利な??ことに、最初のオペランドの型が nullable でない場合、演算子はコンパイルさえしません。

于 2014-01-21T21:03:44.663 に答える
0

String.IsNullOrEmpty(obj.ToString())になることはめったにありませんtrue。私が考えることができる唯一のことは、空の文字列を生成します vi ToString() は別の空の文字列です。実際、 がオーバーライドされていない限り(やToString()のようなネイティブ タイプの場合と同様に、オブジェクトの完全修飾名を取得します。DateTimeint

多分あなたが欲しい

if (obj == default(T))

?

于 2014-01-21T21:01:30.190 に答える