在泛型函数

时间:2016-05-25 21:09:52

标签: c# generics

我有

T? Get(string key) where T : struct {}

我想为特定类型提供特定行为。我希望能做两件事之一。首先添加一个新功能

 T? Get(string key) where T : DateTimeOffset {}

这不起作用,语法完全无效。所以另一个选择是在函数中添加条件逻辑,如下所示:

   if(typeof(T) == typeof(DateTimeOffset))
    {
        return DateTimeOffset.Parse(massaged);
    }

这不起作用,因为我最终试图返回一般不是T的东西,即DateTimeOffset。

我知道我可以添加一个不同的方法GetDateTimeOffset,但我正在尝试创建一个统一的界面。

任何想法?

我知道它必须是可行的 - 想象一下newtonsoft里面的代码(真的很棒)JsonConvert.DeserializeObject<T>它必须用这种类型的条件代码塞满。我想我应该去读那段代码

1 个答案:

答案 0 :(得分:2)

尝试

public T? Get<T>(string key) where T : struct
{
    if (typeof(T) == typeof(DateTimeOffset))
    {
        var dateTimeOffset = DateTimeOffset.Parse(key); //or what have you
        return dateTimeOffset as T?;
    }
    return null; //etc.
}