[英]List Tuple more than 8 items
任何人都可以帮助以下列表元组超过 8 个元素不起作用:
List<Tuple<int, string, double, string, int, string, double, Tuple<int, string>>> tpl = new
List<Tuple<int, string, double, string, int, string, double, Tuple<int, string>>>();
tpl.Add(Tuple.Create(1, "ABC", 100.123, "XYZ", 1, "ABC", 100.123, new Tuple<int, string>(100, "My Rest Item")));
foreach(var k in tpl)
listBox1.Items.Add(k.Item1.ToString() + " ---> " + k.Item2.ToString() + " ---> " + k.Item3.ToString() + " ---> " +
k.Item4.ToString() + " ---> " + k.Item5.ToString() + " ---> " + k.Item6.ToString() + " ---> " +
k.Item7.ToString() + " ---> " + k.Rest.Item1.ToString());
它给出以下错误
错误 1 '
System.Collections.Generic.List<System.Tuple<int,string,double,string,int,string,double,System.Tuple<int,string>>>.Add(System.Tuple<int,string,double,string,int,string,double,System.Tuple<int,string>>)
' 有一些无效参数 C:\\Users\\Hewlett Packard\\AppData\\Local\\Temporary Projects\\WindowsFormsApplication1\\Form1。 cs 68 17 WindowsFormsApplication1 和错误 2 参数 1:无法从“System.Tuple<int,string,double,string,int,string,double,System.Tuple<System.Tuple<int,string>>>
”转换为“System.Tuple<int,string,double,string,int,string,double,System.Tuple<int,string>>
' C:\\Users\\Hewlett Packard\\AppData\\Local\\Temporary Projects\\WindowsFormsApplication1\\Form1.cs 68 25 WindowsFormsApplication1
问题在于Tuple.Create
的最后一个参数。 仔细查看如何定义参数返回值:
public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>>
Create<T1, T2, T3, T4, T5, T6, T7, T8>(
T1 item1,
T2 item2,
T3 item3,
T4 item4,
T5 item5,
T6 item6,
T7 item7,
T8 item8
)
基本上,它会自动将 T8
包装在Tuple<T8>
- 并且有点无益。
您可以使用new
代替:
var value = new Tuple<<int, string, double, string, int, string, double,
Tuple<int, string>>
(1, "ABC", 100.123, "XYZ", 1, "ABC", 100.123,
new Tuple<int, string>(100, "My Rest Item"));
但那真是太可怕了。 自己创建一些静态方法可能更好,例如
public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9>>
Create(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
{
return new Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9>>
(t1, t2, t3, t4, t5, t6, t7, Tuple.Create(t8, t9));
}
(根据需要提供尽可能多的重载)
或者可能是Tuple<T1 ... T7>
的扩展方法:
public static Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>
With(this Tuple<T1, T2, T3, T4, T5, T6, T7> tuple,
TRest rest)
{
return new Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>(
tuple.Item1,
tuple.Item2,
tuple.Item3,
tuple.Item4,
tuple.Item5,
tuple.Item6,
tuple.Item7,
rest);
}
然后你可以使用:
var value = Tuple.Create(1, "ABC", 100.123, "XYZ", 1, "ABC", 100.123)
.With(Tuple.Create(100, "My Rest Item"));
我个人试图完全避免使用这个大小的元组 - 创建一个具有适当属性的命名类型。
我真的不明白为什么我自己,但是当你使用new Tuple<>
而不是Tuple.Create
时代码会工作:
tpl.Add
( new Tuple<int, string, double, string, int, string, double, Tuple<int, string>>
( 1
, "ABC"
, 100.123
, "XYZ"
, 1
, "ABC"
, 100.123
, Tuple.Create(100, "My Rest Item")
)
);
在C#7中
var tup = (1, 2, 3, 4, 5, 6, 7, 8, "nine");
var one = tup.Item1;
var nine = tup.Item9;
我知道这是旧的,但我挣扎了好几个小时,我终于用下面的方法让它工作了:方法:
internal static Tuple<List<double>, List<string>, List<string>, List<string>, List<string>, List<int>, List<int>, Tuple<List<string>, List<int>>> YourMethodName(int something)
// do method work
return new Tuple<List<double>, List<string>, List<string>, List<string>, List<string>, List<int>, List<int>, Tuple<List<string>, List<int>>> (itme1, item2, item3, item4, item5, item6, item7, new Tuple<List<string>, List<int>>(item8, item9));
我正在使用 return Tuple.Create(item1, item2 etc)
并且它一直在工作,直到我尝试使用item9 (它最多只能使用 8 个,即使 item 8 是嵌套元组,然后经过许多小时的谷歌和挫折我发现这个出来。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.