在 C# 中表示类型化的 N 元组

本文关键字:元组 类型化 表示 | 更新日期: 2023-09-27 17:48:59

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

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

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

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

在 C# 中表示类型化的 N 元组

在 C# 中表示这一点的最佳方法是使用 Tuple 类型

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

元组没有明确的语言支持,但正如你所看到的,API 并不太冗长

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

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

就个人而言,在这种情况下,我会使用匿名类型:

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

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

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

有关元组类的更多信息。

您还可以查看使用匿名类型作为元组的替代方法。

示例初始化 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);

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

您是否查看过 .NET 4.0 中引入的Tuple类?

另一种选择是使用匿名类型。

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

        var L = new List<Tuple<string, string, double>>();
        L.Add(Tuple.Create("a", "b", 10D));

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