我正在调用一个返回元组的方法,作为不支持byval异步参数的C#异步方法的解决方法
private async Task< Tuple<List<string>, List<int>>> MyFunction(List<int> inputList){
var stringList= new List<string> ();
var intList= new List<int> ();
...
return Tuple.Create(stringList, intList);
}
要从两个项目创建元组,我使用Create
方法。但是,没有办法从我调用该方法的地方返回它。
private async Task< Tuple<List<string>, List<int>>> CallTupleFunction(){
var intList = new List<int> ();
var myTuple = MyFunction(intList);
var stringList= myTuple[0]; //does not work
intList = myTuple[1]; //does not work
}
答案 0 :(得分:3)
Tuple
不是单个类,它是一组具有相同名称的泛型类。每个类都有一个与其项类型相关联的类型列表,称为ItemN
。在你的情况下,你需要
var myTuple = await MyFunction(intList).ConfigureAwait(false);
// ^^^^^^^^^^^^^^^^^^^^^^
// Remove ConfigureAwait in the front end code (winforms, wpf, etc.)
var stringList= myTuple.Item1;
var intList = nmyTuple.Item2;
要解决[]
语法,不可能提供使用索引器访问元组项的API,因为索引器唯一可能的返回类型是System.Object
。这可能有两个原因:
var stringList= (List<string>)myTuple[0]
,这样才能破坏首先使用元组的目的。Tuple<,...,>
的大量数据的主要问题答案 1 :(得分:2)
Item1
的2个属性
和Item2
await
,然后使用结果所以:
var intList = new List<int>();
var myTuple = await MyFunction(intList);
var stringList = myTuple.Item1;
intList = nmyTuple.Item2;