【问题标题】:Is there any way to initialize several variables from one array? [duplicate]有没有办法从一个数组中初始化多个变量? [复制]
【发布时间】:2012-07-24 12:52:46
【问题描述】:

在某些语言中,可以同时从一个数组初始化多个变量。 例如在 PHP 中你可以这样做:

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

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

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

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

【问题讨论】:

  • 答案是否定的,这很好,因为我会说它比手动分配值可读性差得多
  • 元组赋值在 C# 中不可用,请参阅 stackoverflow.com/questions/8299947/c-sharp-multi-assignment
  • 我刚刚意识到你不需要我的回答。 (我最初对“我知道我可以自己创建函数……”的理解不同。)

标签: c#


【解决方案1】:

在 C# 中,

string[] arr1 = new string[] { "one", "two", "three" };
string s1 = arr1[0];
string s2 = arr1[1];
string s3 = arr1[2];

【讨论】:

  • 这是我目前的做法。我正在寻找的是一种在一个命令中执行此操作的方法,就像 Ispiro 建议的那样,但在 C# 中有一些功能(如果它存在)
【解决方案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);

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

【讨论】:

    【解决方案3】:
    char[] array = new char[] {'a','b','c'};
    

    【讨论】:

    • 我对初始化数组不感兴趣,但对数组值中的几个变量不感兴趣,Ispiros 的答案更像是我想要的,但我想知道它是否存在并内置于这样做的方式。
    【解决方案4】:

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

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

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

    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);
    

    【讨论】:

      猜你喜欢
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      相关资源
      最近更新 更多