c# - 将值类型转换为泛型

标签 c# generics

我有一个泛型类,我需要将其限制为仅值类型(int、float 等)。我有一个基于类型测试调用 Parse 方法的方法。例如:

class MyClass<T>
{
    ...

    private static T ParseEntry(string entry)
    {
        if(typeof(T) == typeof(float))
        {
            return (T) float.Parse(entry);
        }

        if(typeof(T) == typeof(int))
        {
            .... you get the idea
        }
    }
}

将 T 约束到 struct 不起作用,我真的想尽可能避免装箱/拆箱。有什么想法吗?

编辑:对此有更多的了解。我注意到在我正在开发的库中,两个类具有非常相似的属性/方法等。唯一的区别是数据的基础类型(int 或 float)。这让我想到了一个带有泛型的设计。唯一的挂起是因为调用特定的 Parse 方法取决于它是 float 还是 int。我可以通过装箱/拆箱来解决这个问题,但我真的想尽可能避免这种情况。

最佳答案

private static T ParseEntry(string entry)
{
    TypeConverter conv = TypeDescriptor.GetConverter(typeof(T));
    return (T) conv.ConvertFromString(entry);
}

它的优点是可以使用带有类型转换器的任何类型(或者您可以在运行时添加自己的类型)。它确实有拳击,但实际上,it isn't so bad .如果那是您最大的问题,那么您就以错误的方式解决了这个问题。

关于c# - 将值类型转换为泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2031010/

相关文章:

java - Java 编译器忽略了完全限定的泛型类型转换错误?

c# - 如何编写自定义 C# 属性来处理处理程序中的异常

c++ - 在 C++ 中使用模板

generics - 带有 Guice 的 GenericDao

c# - 是否可以在 LINQ-to-SQL 映射中使用泛型?

java - 可以采用 Class 或 Collection 的通用 Java 5 方法?

c# - Hangfire 依赖注入(inject)生命周期范围

c# - 将 FlipView 与 ObservableCollection<writeablebitmap> 绑定(bind)

c# - 有谁知道 .NET 中的货币类型?

c# - 如何使用 WCF 流式传输 XElement/XDocument?