【发布时间】:2022-11-03 18:41:00
【问题描述】:
我有一个处理大量数据的通用方法。
当数据是特定类型(在这种情况下为double)时,我想应用一些额外的处理。
有没有比下面示例中所示的(非常慢的)装箱/拆箱更好的方法?
这似乎意味着我们需要让编译器相信T 和double 是同一类型,在断言这一点的if..else 部分中。
public static T[] HalfIfDouble<T>(T[] data)
{
T[] result;
if (typeof(T) == typeof(double))
{
// result = data.Select(x => x * 0.5).ToArray(); // does not compile
result = data.Select(x =>
{
double d = (double)(object)x;
return (T)(object)(d * 0.5);
}).ToArray();
}
else
{
result = data;
}
// do some more processing...
return result;
}
真正的功能显然比这个例子更复杂。
需要在 .NET Framework 和 .NET 6 中工作。
【问题讨论】:
-
为什么不能投射整个数组?即
if( typeof(T) == typeof(Double) ) { return (Double[])data;}`?