一个方法可以返回T(泛型)作为类型(如int,bool,DateTime等)吗?

时间:2017-09-12 07:00:20

标签: c# generics

我想知道返回泛型的方法是否可以返回int或bool或任何其他数据类型。例如:

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)
...

我知道这可以通过使用对象作为返回类型或使用重载来实现,但是如果它也可以与泛型一起使用就会徘徊。

1 个答案:

答案 0 :(得分:2)

它可以,但你必须与编译器对抗一点,你需要通过对象转换为此工作

private static T GetDefaultValue<T>(SettingType s)
{
  switch(s)
  {
    case s.IntValue:
      return (T)(object)0;
    case s.BoolValue:
      return (T)(object)false;
    case s.DateTimeValue:
      return (T)(object)DateTime.MinValue;
  }
  throw new NotSupportedException("Unsupported type")
}