【发布时间】:2023-03-23 04:27:02
【问题描述】:
我有一个 C# 方法,我试图将 generics 用作:
unsafe private void PerformWindowLevel<T>(int lower, int upper, ref T[] pixels)
在函数的某处我有以下行:
float shift = ... // some value
float scale = ... // some value
float val = ((float)pixels[i] + shift) * scale;
在这里我收到错误Cannot convert type 'T' to 'float'。
方法调用如下:
PerformWindowLevel<byte>(10, 100, ref pixels);
所以我将 byte 类型转换为应该是可能的浮点数。 pixels 是一个声明为public byte[] pixels; 并填充了有效值的字节数组。
【问题讨论】:
-
如果用
这个方法为什么要使用泛型? -
float val = (Convert.ToSingle((object)pixels[i] + shift)) * scale怎么样?应用泛型约束只限于特定类型,如果您想要更广泛的T类型使用转换方法(注意类型参数 T 只能转换为对象)。 -
@TetsuyaYamamoto 这抱怨我不能在对象和浮点数上使用 (+) 运算符...
-
@DdarkSideE 该方法也将与 UInt16 等其他类型一起使用。它们始终可以转换为浮点数。
-
似乎我把
Convert.ToSingle方法放在了错误的范围内:(Convert.ToSingle((object)pixels[i]) + shift)。object需要转换为float并与另一个float执行加法。