c# - 在通用函数中键入特定行为

标签 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>它必须充满这种类型的条件代码。我想我应该去阅读该代码

最佳答案

尝试

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

关于c# - 在通用函数中键入特定行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37447670/

相关文章:

c# - RestSharp BitStamp 身份验证失败

c# - 无效的等级说明符 :expected ',' or ']' error

java - monad 的一般情况可以在 java 6 中表达吗?

c# - 在 C# 中使用 linq to sql 更新数据库记录

c# - 使用 Linq 根据每个项目中的值的总和对列表进行排序

c# - for循环是否计算循环期间添加到自身的元素?

c# - xml 用它的泛型类型序列化一个泛型类

c# - 我可以有可变数量的通用参数吗?

c# - 为什么 ((IList<T>)array).ReadOnly = True 但 ((IList)array).ReadOnly = False?

java - 如何通过不允许 java 泛型中的原语来保持向后兼容性