泛型类不能将类型"T"隐式转换为"Int"



我创建了一个泛型接口类,并使用另一个泛型类继承了它。 编译器不喜欢我的函数(请参阅代码中的错误(。

我错过了什么?

我想从 ChecksumTruncate12Bit 创建类型为 ushort、uint 和 ulong 的对象

public interface IChecksum<T>
{
T Checksum(byte[] buffer, int size);
}
public class ChecksumTruncate12Bit<T> : IChecksum<T>
{
public T Checksum(byte[] buffer, int size)
{
T rv = (T)0; // Error CS0030 Cannot convert type 'int' to 'T'
for (int i = 0; i < size; ++i)
{
rv += (T)(buffer[i]); // Error CS0030 Cannot convert type 'byte' to 'T'
rv &= (T)(0x0FFF); // Error CS0030 Cannot convert type 'int' to 'T'
}
return rv;
}
}

使ChecksumTruncate12Bit本身通用是没有意义的(也是不可能的(。它仍然可以实现您的通用接口,它只需要指定类型 - 在此示例中uint

public class ChecksumTruncate12BitUint : IChecksum<uint> 
{
public uint Checksum(byte[] buffer, int size)
{
uint rv = 0; 
for (int i = 0; i < size; ++i)
{
rv += (uint)(buffer[i]); 
rv &= (uint)(0x0FFF); 
}
return rv;
}
}

您可以分别实现ushortulong

最新更新