2

在某些语言中,可以同时从一个数组初始化多个变量。例如,在 PHP 中,您可以执行以下操作:

$array = array('a', 'b', 'c');
list($a, $b, $c) = $array;

是否也可以在 C# 中执行此操作?

我想将其应用于一个程序,在该程序中,我从一个文件中读取所有行,我知道每行只有两个单词(永远不会更多,永远不会更少)。我知道我可以自己创建函数(并通过out关键字引用发送变量)但我想知道是否存在任何内置功能。

我想知道这主要是因为如果可能的话,代码对于其他开发人员来说可能更具可读性。

4

4 回答 4

2

在 C# 中,

string[] arr1 = new string[] { "one", "two", "three" };
string s1 = arr1[0];
string s2 = arr1[1];
string s3 = arr1[2];
于 2012-07-24T12:55:04.917 回答
2

如果可读性是问题,并且如果我理解正确 - 我不知道内置的方式。但是您可以为此创建一个函数。

void Doit(out string one, out string two, string[] input)
{
    one = input[0];
    two = input[1];
}

并这样使用它:

string[] s = new string[] { "First", "Second" };
string a, b;
Doit(out a, out b, s);

我才意识到你不需要我的回答。(我最初对“我知道我可以自己创建函数……”的理解不同。)不过,也许它可以帮助其他人。

于 2012-07-24T12:57:23.000 回答
0
char[] array = new char[] {'a','b','c'};
于 2012-07-24T12:55:01.317 回答
0

据我所知,没有内置的方法可以做到这一点。

也许实现该功能的一个好方法是使用扩展方法来提高可读性。

只需在扩展方法中编写所需的代码,该方法可以附加到您要初始化的类型,如上面示例中的列表,并将数组作为该函数的输入:

public static class Extensions {

    public static void initFromArray<T> (this List<T> list, T[] array) {

        for (int i = 0; i < array.Length; i++) {

            list[i] = array[i];
        }
    }
}

然后您可以使用此方法,例如如下所示:

int[] array = new int [] { 1, 4, 6, 2, 5 };

List<int> list = new List<int>();

for (int i = 0; i < 4; i++) list.Add(0);

list.initFromArray<T>(array);
于 2012-07-24T13:19:38.360 回答