如何将变量名称映射到数组索引

时间:2016-12-14 02:46:23

标签: c#

假设我有一个固定大小为N的数组,有没有办法将元素映射到N个变量名列表?

我想的是:

variable1, variable2, variable3 = arrayOfSize3;

修改

有些人评论说这没用,并暗示我做错了什么。也许我是,但这是动态语言中非常常见的功能所以我希望C#有一些优雅的选择。

如果有帮助,我可以写出我需要的东西。我已经解析了一个HTML表,并有一个表示该行一行的字符串数组。我创建了一个类来表示具有表示数据的变量的行,但是为了存储我必须手动为每个数组元素设置名称的数据。我知道还有其他方法可以做到这一点,但我想知道更多的是出于好奇而不是其他什么,映射变量的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

他们不是这样的任务,但你可以这样做:

var variable1 = arrayOfSize3[0];
var variable2 = arrayOfSize3[1];
var variable3 = arrayOfSize3[2];

答案 1 :(得分:0)

尚未准备好生产,但您可以在Visual Studio 15预览附带的C#7预览中执行此操作。使用解构匹配,以下代码适用于元组

var (variable1, variable2, variable3) = tupleOfSize3;

此功能实际上适用于任何具有此类

的解构器方法的功能
public void Deconstruct(out T1 x1, ..., out Tn xn) { ... }

也许数组会有这个扩展名。请参阅What's new in C# 7.0

答案 2 :(得分:0)

元组是一组固定数值,每个值都有自己的名称和类型。另一方面,数组是一组可变数量的匿名值,所有这些都是相同的类型。这是两种截然不同的聚合类型,它们实际上主要用于不相交的用例。

话虽如此,可以解构一个数组(在Visual Studio 15预览版附带的C#7预览版中)!您可以通过添加自己的Deconstruct方法作为扩展方法来实现:

class C
{
    public static void Main()
    {
        int[] x = new int[2];
        var (a, b) = x;
    }
}

static class ArrayUtilities
{
    public static void Deconstruct(this int[] data, out int a, out int b)
    {
        a = data[0];
        b = data[1];
    }
}