如何确定泛型方法中返回值的类型

时间:2009-07-10 20:28:30

标签: c# .net generics

我们已经创建了一个通用的方法:

public TReturnType GetValue(string key)
{
   var configurationParameter = (from cp in _repository.ConfigurationParameters
        where cp.ConfigurationParameterKey == key
        select cp).FirstOrDefault();

   var returnValue (TReturnType)Convert.ChangeType(configurationParameter.ConfigurationParameterValue, typeof (TReturnType));
   return returnValue;
}

现在,我们想在此方法中进行一些错误处理,以便在我们期望数字类型的情况下,我们可以做,例如,int.TryParse(returnValue,out myNewInt)。当然,为了能够做到这一点,我们必须能够确定方法中TReturnType的类型。

有办法做到这一点吗?

感谢您的所有帮助。 问候。

2 个答案:

答案 0 :(得分:3)

当然可以,但你应该考虑这是不是一个好主意。你总是可以说

if (typeof(T) == typeof(int)) whatever

但这样做有点代码味道不好。泛型的全部意义在于是通用的。如果你有T是一个整数的专用代码,那么为什么不简单地添加另一个处理整数情况的方法

答案 1 :(得分:2)

当然,只需添加一些代码:

if(typeof(TReturnType) == typeof(int))
{
    var number = (int)returnValue;
    //Validate your output
}