C#のジェネリック型を考えると、null許容型とnull許容型に等しいT
型を取得する方法がわかりません。Q
T?
T
T
T
質問は実際のコードから生じました。ASP.NETアプリケーションのクエリ文字列を介して渡されるパラメーターへのアクセスを統一したい。また、同じタイプのデフォルト値を指定したいのですが、null
デフォルト値として渡すことができることを確認してください。
public static T FetchValue<T>(
string name,
<T? for non-nullable, T otherwise> default_value = null) // How to write this?
{
var page = HttpContext.Current.Handler as Page;
string str = page.Request.QueryString[name];
if (str == null)
{
if (default_value == null)
{
throw new HttpRequestValidationException("A " + name + " must be specified.");
}
else
{
return default_value;
}
}
return (T)Convert.ChangeType(str, typeof(T));
}
現在、私は2つのオーバーロードを強制されていFetchValue
ます。1つはデフォルト値なしで、もう1つはデフォルト値ありです。
public static T FetchValue<T>(string name);
public static T FetchValue<T>(string name, T default_value);
正常に動作しますが、このように両方の機能をマージできるのではないかと思います。
C ++では、null許容型とnull許容型の両方PromoteNullable<T>::type
の2つの特殊化のように、型特性を使用します。PromoteNullable
しかし、C#はどうですか?