gpt4 book ai didi

c# - 将不实现接口(interface)但满足所有条件的对象添加到期望接口(interface)的列表中

转载 作者:行者123 更新时间:2023-11-30 14:38:25 24 4
gpt4 key购买 nike

我有以下内容:

List<IReport> myList = new List<IReport>();

Report myReport = TheirApi.GetReport();

myReport满足了IReport的所有条件,但是无法实现IReport,因为我无权访问TheirApi的源码。强制转换为 IReport 类型显然会导致 null,而且我读到我无法将匿名类型强制转换为接口(interface)。

我在这里有什么选择吗?

包装类正是医生要求的:

ReportServices.GetAllCustomReports().ToList().ForEach(customReport => _customReports.Add(new ReportWrapper(customReport)));

public class ReportWrapper : IReport
{
private Report inner;

public int ID
{
get { return inner.ID; }
set { inner.ID = value; }
}
public string Name
{
get { return inner.Name; }
set { inner.Name = value; }
}

public ReportWrapper(Report obj)
{
inner = obj;
}
}

最佳答案

您需要将此对象包装在另一个实现该接口(interface)的对象中,然后您需要调用内部对象的属性和方法来实现它。

例如:

public class ReportWrapper : IReport
{
MyObjectIsLikeReport inner;

public ReportWrapper(MyObjectIsLikeReport obj) {
this.inner = obj;
}

public void ReportMethod(int value) {
this.inner.ReportMethod(value);
}

public int SomeProperty {
get { return this.inner.SomeProperty; }
set { this.inner.SomeProperty = value; }
}
}

要使用它,您可以这样做:

List<IReport> myList = new List<IReport>();
MyObjectIsLikeReport myReport = TheirApi.GetReport();
myList.Add(new ReportWrapper(myReport));

关于c# - 将不实现接口(interface)但满足所有条件的对象添加到期望接口(interface)的列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7935782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com