问题描述
解决方案
如果您可以将使用代码更改为使用 aIReadOnlyList<T>
而不是 a那么编写一个将 a 转换为List<T>
a 的类并不难:Tuple<T,U>
IReadOnlyList<T>
public sealed class TupleExtraction<T, U> : IReadOnlyList<T>
{
readonly List<Tuple<T, U>> _list;
public TupleExtraction(List<Tuple<T, U>> list)
{
_list = list;
}
public T this[int index] => _list[index].Item1;
public int Count => _list.Count;
public IEnumerator<T> GetEnumerator()
{
return _list.Select(item => item.Item1).GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return _list.Select(item => item.Item1).GetEnumerator();
}
}
然后你可以像这样使用它:
class Program
{
static void Main()
{
List<Tuple<string, int>> test = new List<Tuple<string, int>>
{
new Tuple<string, int>("one", 1),
new Tuple<string, int>("two", 2),
new Tuple<string, int>("three", 3)
};
var extract = new TupleExtraction<string, int>(test);
for (int i = 0; i < extract.Count; ++i)
Console.WriteLine(extract[i]);
foreach (var item in extract)
Console.WriteLine(item);
}
}
请注意,这不会复制基础列表。
推荐阅读
- php - PHP如何为在while循环上为每一行创建的按钮生成唯一名称
- java - 无法使用 JDBC 将数据插入 MsSQL
- apache-spark - 如何在不遇到 OOM 的情况下在 Apache Spark 中进行总排序?
- android - intel Haxm 正在运行,但 android studio 3.6 无法识别
- php - 在 VS 代码中,PHP 文件无法在实时服务器上运行
- sql-server - sql server 快速增长表的方法
- ios - 应用程序崩溃 UIFoundation:UINibDecoderDecodeObjectForValue + 424
- list - 输入'列表
' 不是类型 'List 的子类型 ',扑腾 - php - JSON.parse 在 Chrome 上出现错误,但在 Firefox 上运行良好
- swift - 这些 Swift 错误信息是什么意思?(函数声明了一个不透明的返回类型......)