genericを返すメソッドがintまたはboolまたは他のデータ型を返すことができる方法があるのだろうかと思います。メソッドは型(int、bool、DateTimeなど)としてT(汎用)を返すことはできますか?
private static T GetDefaultValue<T>(SettingType s)
{
switch(s)
{
case s.IntValue:
return 0;
case s.BoolValue:
return false;
case s.DateTimeValue:
return DateTime.MinValue;
}
return 0;
}
などをさらに使用すること:例えば
...
int x = GetDefaultValue<int>(s.IntValue)
...
私は、これは戻り値の型としてオブジェクトを使用して、または過負荷を使用することによって達成することができることを知っているが、それはまた、ジェネリックで動作することができるかどうかさまよいました。
に動作するように、このためにオブジェクトを介してキャストする必要がありますすることができます。しかし、いいえ、ジェネリックスはジェネリック*の問題、すなわち異なるタイプに透過的に適用できる問題を解決するためのものです。 – Groo
デフォルト以外の一般的なパターンは '(T)(object)myValue'です。これは必然的にランタイム変換を伴うので、コンパイル時のジェネリックの安全性の欠如のようなものです。 –
あなたはおそらく 'SettingType'なしで行くことができます:' Type type = typeof(T); type == typeof(int)){/ * do int stuff * /} else if(type == typeof(bool){/ * do bool stuff * /})[など] ' - 悲しいことに' Type' 'switch 'で再生されません。 – Corak