C# 泛型函数中特定于类型的行为

C# 泛型函数中特定于类型的行为,c#,generics,C#,Generics,我有 我想为特定类型提供特定行为。我希望能做两件事中的一件。首先添加一个新函数 T? Get(string key) where T : struct {} 这不起作用,语法根本无效。因此,另一个选择是在函数中添加条件逻辑,如下所示: T? Get(string key) where T : DateTimeOffset {} 这不起作用,因为我最终尝试返回的不是一般意义上的t,即DateTimeOffset 我知道我可以添加一个不同的方法GetDateTimeOffset,但我正在尝试创

我有

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

T? Get(string key) where T : struct {}
这不起作用,语法根本无效。因此,另一个选择是在函数中添加条件逻辑,如下所示:

 T? Get(string key) where T : DateTimeOffset {}
这不起作用,因为我最终尝试返回的不是一般意义上的t,即DateTimeOffset

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

有什么想法吗

我知道这一定是可行的——想象一下newtonsoft(真的很棒)的
JsonConvert.DeserializeObject中的代码,它必须塞满这种类型的条件代码。我想我应该去读一下代码,试试看

   if(typeof(T) == typeof(DateTimeOffset))
    {
        return DateTimeOffset.Parse(massaged);
    }
公共电话?Get(字符串键),其中T:struct { if(typeof(T)=typeof(DateTimeOffset)) { var dateTimeOffset=dateTimeOffset.Parse(key);//或者你做了什么 返回日期时间偏移量为T?; } 返回null;//等。 }
Does
return(T)DateTimeOffset.Parse(massaged)工作?否-也不(T?)DateTimeOffset…..嗯。编译器不知道如何将
DateTimeOffset
转换为任何结构,并且无法告诉它“在这种情况下,T是DateTimeOffset”。我想你可以用一些讨厌的
Marshal.StructureToPtr
Marshal.PtrToStructure
之类的东西来实现这一点。啊,也许不是:“键入'System.DateTimeOffset'不能作为非托管结构进行封送;无法计算有意义的大小或偏移量。”
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.
}