我正在使用C#。我在代码中创建了一个称为EntityInterface的接口。我写了这个函数:
private void Save(List<EntityInterface> entities)
{ ... }
在代码的其他地方,我有一个变量定义为List<Job>
。 Job类是实现EntityInterface的类。
我无法将Job对象列表传递给Save方法。编译器抱怨该参数类型错误,因为List<Job>
与List<EntityInterface>
不同。
我需要修改该函数以表达该参数可以是“实现EntityInterface的任何对象的列表”的想法。我已经搜索了一下,但是找不到如何执行此操作的示例。
答案 0 :(得分:1)
您的模型应如下所示:
using System.Collections.Generic;
public interface IEntity
{
void Save<T>(List<T> entities) where T : IEntity;
}
public class Job : IEntity
{
void IEntity.Save<T>(List<T> entities) { }
}
public class TargetImpl : IEntity
{
void IEntity.Save<T>(List<T> entities) { }
}
并作为逐步测试:
using System.Collections.Generic;
using Xunit;
public class UnitTest1
{
[Fact]
public void Test1()
{
IEntity ientity = new TargetImpl();
ientity.Save(new List<Job>());
}
}
上面的示例有一个警告,为简洁起见,该类显式实现了IEntity接口,因为此类子实现必须通过该接口显式引用。对于类似但微妙的实现,您也可以执行以下操作:
public class Job : IEntity
{
public void Save<T>(List<T> entities) where T : IEntity { }
}
public class TargetImpl : IEntity
{
public void Save<T>(List<T> entities) where T : IEntity { }
}
和测试提示可以(可选)更改为:
[Fact]
public void Test1()
{
targetImpl ientity = new TargetImpl();
ientity.Save(new List<Job>());
}