2
public static T Process<T>(this string key)
        where T:bool,string, DateTime
    {
        var tType = typeof(T);

        if(tType == typeof(DateTime))
        {
            return DateTime.Parse(key.InnerProcess());
        }
        else if(tType == typeof(bool))
        {
            return bool.Parse(key.InnerProcess());
        }
        else if(tType == typeof(string))
        {
            return key.InnerProcess();
        }
    }

它说它不能从 bool 类型转换为 T,或 datetime 到 T.. 如何实现这一点?

innerPrecess()了我一个字符串。我想将它解析为给定参数的类型,然后返回它。

4

2 回答 2

6

您可以Convert.ChangeType更简单地使用:

public static T Process<T>( string key) where T: IConvertible
{
    return (T)Convert.ChangeType(key.InnerProcess(), typeof (T));
}
于 2013-06-27T04:49:56.557 回答
5

编译器不会尝试理解代码来证明您返回的T. 不幸的是,这样做的唯一方法是添加一个框/取消框(对于值类型,而不是字符串):

return (T)(object)DateTime.Parse(...etc...);

就个人而言,我建议只使用单独的非泛型方法,除非有很好的理由在这里使用泛型。

于 2013-06-27T04:48:45.847 回答