将T限制为字符串和整数?

Mat*_*ats 17 c# generics types class

我自己构建了一个泛型集合类,它是这样定义的.

public class StatisticItemHits<T>{...}
Run Code Online (Sandbox Code Playgroud)

此类只能intstring值一起使用.不过这个

public class StatisticItemHits<T> where T : string, int {...}
Run Code Online (Sandbox Code Playgroud)

不会编译.我究竟做错了什么?

dri*_*iAn 15

类型限制旨在与接口一起使用.您的示例表明您希望允许继承自int和string的类,这有点无稽之谈.我建议你设计一个接口,其中包含你将在泛型类StatisticItemHits中使用的方法,并使用该接口作为限制.但是我在这里看不到您的要求,也许您可​​以发布有关您的方案的更多详细信息?


Rub*_*ben 6

您可以创建StatisticItemHits<T>一个抽象类并创建两个子类:

StatisticItemHitsInt : StatisticItemHits<int>{}

StatisticItemHitsString : StatisticItemHits<string>{}

这样,只能有StatisticItemHits的int和字符串表示


Sea*_*ron 5

正如其他人所说,你不能以这种方式使用类型限制.你可以做的是从你的基本类型专门化如下:

public class StatisticItemHits <T> { }

public class StringStatisticItemHits : StatisticItemHits<string> { }

public class IntegerStatisticItemHits : StatisticItemHits<int> { }
Run Code Online (Sandbox Code Playgroud)

此外,由于您的基类是通用的,因此您无法以多态方式使用它.如果需要这样做,请使StatisticItemHits实现一个接口并使用它来引用实例.就像是:

public class StatisticItemHits <T> : IStaticticItemHits { }

public interface IStatisticItemHits { }
Run Code Online (Sandbox Code Playgroud)