【发布时间】:2013-08-12 21:33:17
【问题描述】:
我想编写泛型类,该类旨在与byte 和ushort 等内置类型一起使用。在内部计算中,我需要将泛型类型转换为整数并返回泛型类型。我找到了编译此类代码的方法,例如:
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;
}
}
我认为,如果在计算循环中使用此类转换,可能会显着降低性能。有没有更好的方法来进行这些转换?
【问题讨论】:
-
您对此性能的基准是什么,否则要改进的人是什么?更不用说你怎么知道这甚至是一个真正的问题。
-
@GrantThomas -
Convert.ToInt32和Convert.ChangeType都接受Object参数。这意味着,此代码需要装箱。我可以换个方式问这个问题:是否可以避免拳击? -
您可以,甚至可以使其更快,但这仍然不会成为问题。
-
.net 无论如何都会优化 32 位整数。见link