gpt4 book ai didi

c# - 从 IList 转换为非泛型 IList

转载 作者:IT王子 更新时间:2023-10-29 04:48:33 29 4
gpt4 key购买 nike

我正在实现 IListSource这需要一个方法 GetList()具有以下签名:

IList GetList()

我正在使用 .NET Framework 2,我想返回一个实现 IList 的对象,如下所示:

public System.Collections.IList GetList()
{
return this._mydata; // Implements IList<MyDataRow>
}

但是我得到一个编译错误:Cannot implicitly convert type MyData to System.Collections.IList .

如果我创建一个类型为 List<MyDataRow>列表,填充它并返回这个列表对象,然后它就可以工作了。所以换句话说,这是可行的:

public System.Collections.IList GetList()
{
List<MyDataRow> list = new List<MyDataRow>();
foreach (MyDataRow row in this._mydata)
{
list.Add(row);
}
return list;
}

但是为了从类型 IList<T> 中获取列表而必须重新创建列表似乎效率很低至 IList .为什么我可以返回 List<MyDataRow>' from 'GetList() , 但不是 IList<MyDataRow> ?有谁知道我返回 IList<MyDataRow> 的方法吗?不重新填充新列表?

更新:

_mydata声明成员变量:

private MyData _mydata;

MyData声明:

public class MyData : IList<MyDataRow>
{
....
}

最佳答案

Why is it that I can return a List<MyDataRow> from GetList(), but not an IList<MyDataRow>

这是因为 List<T>工具 IList , IList<T>无法转换为 IList它们是 2 个独立的接口(interface)。所以回答你的问题:

Does anyone know of a way for me to return the IList<MyDataRow> without repopulating a new list?

如果具体类型实现IList (List<T> 做的)然后你可以显式地转换它,例如

return (IList)this.mydata;

更新

根据您的更新,您必须更新 MyData实现IList否则你别无选择,只能返回一个确实实现它的新集合。

或者,如果 MyData确实是一个通用列表那么我建议你让它继承自 List<T> ,这样你就可以获得更多的灵 active 和兼容性,例如

class MyData : List<MyDataRow>
{
}

关于c# - 从 IList<T> 转换为非泛型 IList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12495910/

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