【发布时间】:2015-02-18 12:03:46
【问题描述】:
interface IResourceProperties
{
}
class TopLevelResource<T>
where T: IResourceProperties
{
}
class Camera: TopLevelResource<CameraProperties>
{
}
class CameraProperties : IResourceProperties
{
}
class Phone: TopLevelResource<PhoneProperties>
{
}
class PhoneProperties : IResourceProperties
{
}
void Main()
{
List<Camera> cameras = new List<Camera>();
List<Phone> phones = new List<Phone>();
DoSomething(cameras);
DoSomething(phones);
}
void DoSomething<T>(List<T> items)
where T: TopLevelResource<IResourceProperties>
{
return;
}
我有上面提到的类层次结构。
通用方法DoSomething 需要能够在相机和电话上工作。
但我收到以下错误:
类型“Camera”不能用作泛型中的类型参数“T” 类型或方法“DoSomething(System.Collections.Generic.List)”。 没有从“服务器”到的隐式引用转换 'TopLevelResource'。
这表明这是不可能的。
能够通用地编写 DoSomething 并同时处理电话和相机的最佳选择是什么。
【问题讨论】:
-
Server 类型从何而来?您在编译或运行时是否收到此错误?这是您尝试调用 DoSomething 方法的时候吗?
-
我忽略了
Server错误作为红鲱鱼 - 假设发布的代码是对实际使用代码的简化。 -
已修复。它实际上是相机而不是服务器