2

我一直在尝试以下

interface IUIntegral : IEquatable<Byte>, IEquatable<UInt16>, IEquatable<UInt32>, IEquatable<UInt64> { }
class Counter<T> where T : IUIntegral {
    T _value;
}

使用此调用代码

Counter<UInt32> foo = null;

但我得到这个编译器错误

Error   1   The type 'uint' cannot be used as type parameter 'T' in the generic type or method 'Test.Counter<T>'. There is no boxing conversion from 'uint' to 'Test.IUIntegral'.
4

1 回答 1

5

tldr; 这种方法行不通。

C# 使用主格类型系统(类型由名称确定)而不是结构类型系统(类型由数据/操作确定)。

unit32并且IUIntegral不相关:即使它们共享相同的结构

(无论如何,它们不符合,uint32不符合IEquatable<byte>。)

如果一个类型需要与自身 Equatable,这可以通过在类型限制中引用类型来完成:

class Counter<T> where T : IEquatable<T> {
    T _value;
}
于 2012-04-02T02:23:03.383 回答