【发布时间】:2014-12-02 20:08:54
【问题描述】:
我们使用 .NET Framework 3.5 制作了一些类,如下所示:
public class A
{
public override string ID { get; set; }
public override string Name { get; set; }
private List<B> versionen = new List<B>();
public List<B> Versionen
{
get { return versionen; }
set { versionen = value; }
}
}
被其他类中的方法使用,例如
private static void DoSomething(List<A> versioningObj)
{
foreach (A concretClassAObject in versioningObj)
{
foreach (B concretClassAVersionObject in concretClassAObject.Versionen)
{
}
}
}
为了重构这段代码并开发通用方法,我尝试实现以下接口:
public interface VersioningObject<T> : IIDIdentifiable where T : IIDIdentifiable
{
string Name { get; set; }
List<T> Versionen { get; set; }
}
public interface IIDIdentifiable
{
string ID { get; set; }
}
A 类实现“VersioningObject”,B 类实现“IIDDIdentifiable”。新方法如下所示:
private static void DoSomething(List<VersioningObject<IIDIdentifiable>> versioningObj)
{
foreach (VersioningObject<IIDIdentifiable> concretClassAObject in versioningObj)
{
foreach(IIDIdentifiable concretClassAVersionObject in concretClassAObject.Versionen) {
}
}
}
我尝试将此方法称为“DoSomething”:
List<A> myList = new List<A>() {new A()};
DoSomething(myList);
并得到以下错误:
- 无法将“System.Collection.Generic.List”转换为“System.Collection.Generic.List>”
- DoSomeThing(System.Collections.Generic.List>) 的最佳重载方法匹配有一些无效参数
我该如何解决这个问题。非常感谢您!
【问题讨论】:
-
你的问题毫无意义。首先什么是
B?其次,DoSomething有 void 返回类型? -
如果您将
T限制为IIDIdentifiable,为什么还要使用通用VersioningObject<T>?为什么不让VersioningObject拥有List<IIDIdentifiable> Versionen? -
顺便说一句。标题有点误导。您的所有课程都没有实现
IList<T>。 -
对不起两个不正确的项目:
-
A 类实现 'Versioning
' 并且对该方法的调用必须是:DoSomething(myList);不是 var test = DoSomething(myList); 'B' 只是一个实现 IIDIdentifiable 的类