c# - 将泛型参数转换为整数或从整数转换为整数

标签 c# generics casting

我想编写通用类,旨在与 byteushort 等内置类型一起使用。在内部计算中,我需要将通用类型转换为整数,然后再转换回通用类型。我找到了编译此类代码的方法,例如:

class Test<T> where T : struct, IConvertible
{
    public static T TestFunction(T x)
    {
        int n = Convert.ToInt32(x);
        T result = (T)Convert.ChangeType(n, typeof(T));
        return result;
    }
}

我认为,如果在计算循环中使用此类转换,它们可能会显着降低性能。是否有更好的方法来进行这些转化?

最佳答案

intT转换有点棘手。我想你可以使用 Expression在这里上课。

Test<T>类应该看起来像这样:

class Test<T> where T : struct, IConvertible
{
    private static Func<int, T> _getInt;

    static Test()
    {
        var param = Expression.Parameter(typeof(int), "x");
        UnaryExpression body = Expression.Convert(param, typeof(T));
        _getInt = Expression.Lambda<Func<int, T>>(body, param).Compile();
    }

    public static T TestFunction(T x)
    {
        int n = Convert.ToInt32(x);
        T result = _getInt(n);
        return result;
    }
}

准备_getInt = x => (T)x在静态构造函数中为您提供并稍后使用它来转换 intT .

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

相关文章:

c# - 设计推荐 : Lazy init of objects in an array

arrays - 数组<编号> : get and set Int values without casting

c# - 关于 Linq to SQL 映射对象设计的建议

c# - 在用户未登录时将文件复制到映射的驱动器(计划任务)

Java 泛型 : array creation, 类型转换和未经检查的警告

c - C 中泛型数据类型值的十六进制表示

java - ArrayList 转换为 Instances 对象

c# - 为什么这个 Linq Cast 在使用 ToList 时会失败?

java - 转换派生 Java 接口(interface)的集合(泛型)

c# - 哪一个是更好的架构/设计方法?