在C#中表示键入的N元组

时间:2011-04-05 21:32:21

标签: c# .net generics coding-style

List<struct {string, string, double} > L = new List<struct {string, string, double}>;
L.Add({"hi", "mom", 5.0});

在C#中获取此功能的最佳方式是什么?我想动态定义一个强类型元组(用于本地函数),将一堆它们保存在列表中,进行一些处理并返回结果,再也不要再触摸列表。

我实际上并不关心强类型,但是vars列表不起作用。我想要一个对象列表吗?这是我能得到的最接近的吗?

为临时数据结构定义结构或类似乎对我来说是冗长和迂腐。

7 个答案:

答案 0 :(得分:7)

在C#中表示此问题的最佳方法是使用Tuple类型

var l = new List<Tuple<string, string, double>>();
l.Add(Tuple.Create("hi", "mom", 42.0));

对元组没有明确的语言支持,但正如您所看到的那样,API

答案 1 :(得分:6)

var arr = new[] { Tuple.Create("hi","mom", 5.0) };

是最简单的;这实际上是一个数组,但列表也很容易 - 如果你感到懒惰,也许.ToList()

就个人而言,在这种情况下我会使用anon-type:

var arr = new[] { new { Text = "hi", Name = "mom", Value = 5.0 } };

非常相似,只是会员名称更有意义。

答案 2 :(得分:2)

您还可以查看using anonymous types作为元组的替代方法。

anon类型数组的初始化示例并循环结果:

var anons = new [] { new {num=1, str="str1"},
                     new {num=2, str="str2"} };

foreach(var v in anons) Console.WriteLine(v.num + " " + v.str);

答案 3 :(得分:2)

List<Tuple<string, string, double>> L = new List<Tuple<string, string, double>>();
L.Add(Tuple.Create("hi", "mom", 5.0));

有关Tuple课程的详情。

答案 4 :(得分:1)

如果您使用的是C#4.0,则可以使用Tuple类型

答案 5 :(得分:1)

你看过.NET 4.0中引入的Tuple类吗?

另一种选择是使用anonymous types

答案 6 :(得分:1)

我能想到的最简单的方法是使用元组:

        var L = new List<Tuple<string, string, double>>();

        L.Add(Tuple.Create("a", "b", 10D));

或者您也可以使用动态列表