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

时间:2019-12-05 11:55:26

标签: c#

我创建了一个通用接口类,并使用另一个通用类从它继承。 编译器不喜欢我的功能(请参见代码中的错误)。

我想念什么?

我想从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;
    }
}

1 个答案:

答案 0 :(得分:0)

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实施。