Bru*_*ill 19 .net c# generics list c#-2.0
我正在实现IListSource,需要一个GetList()具有以下签名的方法:
IList GetList()
Run Code Online (Sandbox Code Playgroud)
我正在使用.NET框架2,我想要返回一个实现IList的对象,如下所示:
public System.Collections.IList GetList()
{
return this._mydata; // Implements IList<MyDataRow>
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个编译错误说: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;
}
Run Code Online (Sandbox Code Playgroud)
但是,为了从类型IList<T>到它来重新创建列表似乎效率非常低IList.为什么我可以退货List<MyDataRow>' from 'GetList(),但不是IList<MyDataRow>?有没有人知道如何在IList<MyDataRow>没有重新填充新清单的情况下退货?
更新:
该_mydata成员变量声明:
private MyData _mydata;
Run Code Online (Sandbox Code Playgroud)
并MyData宣布:
public class MyData : IList<MyDataRow>
{
....
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*mes 15
为什么我可以返回一个
List<MyDataRow>从GetList(),但不是IList<MyDataRow>
这是因为List<T>implements IList,IList<T>不能被强制转换IList为2个独立的接口.所以回答你的问题:
有没有人知道如何在
IList<MyDataRow>没有重新填充新清单的情况下退货?
如果具体类型实现IList(List<T>确实如此),那么你可以显式地转换它,例如
return (IList)this.mydata;
Run Code Online (Sandbox Code Playgroud)
更新
根据您的更新,你将不得不更新MyData来实现IList,否则你别无选择,但要返回的新集合并实现它.
或者,如果MyData确实是一个通用列表,那么我建议你继承它List<T>,这样你就可以获得更多的灵活性和开箱即用的兼容性,例如
class MyData : List<MyDataRow>
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15613 次 |
| 最近记录: |