列出元组超过8个项目 [英] List Tuple more than 8 items
问题描述
任何人都可以帮助下面的列表元组中超过8个元素不起作用:
Can anyone help the following List Tuple more than 8 elements is not working:
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 \ HewlettPackard \ AppData \ Local \ Temporary项目\ 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 \ HewlettPackard \ AppData \ Local \ TemporaryProjects \ WindowsFormsApplication1 \ Form1.cs 68 25 WindowsFormsApplication1
Error 1 The best overloaded method match for '
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>>)
' has some invalid arguments C:\Users\Hewlett Packard\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs 68 17 WindowsFormsApplication1 and Error 2 Argument 1: cannot convert from 'System.Tuple<int,string,double,string,int,string,double,System.Tuple<System.Tuple<int,string>>>
' to '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
推荐答案
The problem is with the last argument to Tuple.Create
. Look carefully at how the argument return value is defined:
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>
中-有点无益.
Basically, that wraps T8
in a Tuple<T8>
automatically - and somewhat unhelpfully.
您可以改用 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"));
那真是太可怕了.最好自己创建一些静态方法,例如
That's pretty ghastly though. It might be better to create some static methods yourself, e.g.
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));
}
(需要的重载次数很多)
(with as many overloads as you need)
或可能是 Tuple< T1 ... T7>
上的扩展方法:
or possibly an extension method on 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"));
个人而言,我会尽量避免完全具有这样的元组大小-而是使用适当的属性创建一个命名类型.
Personally I'd try to avoid having this size of tuple entirely though - create a named type with the appropriate properties, instead.
这篇关于列出元组超过8个项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!