1. ホーム
  2. c#

[解決済み] C#でジェネリックメソッドを作成する

2023-02-04 14:36:45

質問

類似のメソッドをまとめて汎用的なメソッドにしようとしています。 私は、クエリ文字列の値、またはそのクエリ文字列が存在しないか、正しい形式でない場合はnullを返すいくつかのメソッドを持っています。 すべての型がネイティブに null 可能であれば、これは十分に簡単ですが、私は整数と日付に null 可能な汎用型を使用する必要があります。

これが今あるものです。 しかし、数値が無効な場合、0 を返しますが、残念ながら、私のシナリオでは有効な値です。 誰か助けてくれませんか? ありがとうございます。

public static T GetQueryString<T>(string key) where T : IConvertible
{
    T result = default(T);

    if (String.IsNullOrEmpty(HttpContext.Current.Request.QueryString[key]) == false)
    {
        string value = HttpContext.Current.Request.QueryString[key];

        try
        {
            result = (T)Convert.ChangeType(value, typeof(T));  
        }
        catch
        {
            //Could not convert.  Pass back default value...
            result = default(T);
        }
    }

    return result;
}

どのように解決するのですか?

default(T)を使わず、デフォルト値を指定して返したらどうでしょうか?

public static T GetQueryString<T>(string key, T defaultValue) {...}

呼び出すのも簡単になります。

var intValue = GetQueryString("intParm", Int32.MinValue);
var strValue = GetQueryString("strParm", "");
var dtmValue = GetQueryString("dtmPatm", DateTime.Now); // eg use today's date if not specified

欠点は、無効なクエリ文字列や欠落したクエリ文字列を示すためにマジック値が必要なことです。