将数组的值分配给一行中的变量

时间:2009-09-14 15:09:01

标签: c# arrays string initialization declaration

我可以将数组中的每个值分配给C#中的一行中的变量吗?这是Ruby代码中我想要的一个例子:

irb(main):001:0> str1, str2 = ["hey", "now"]
=> ["hey", "now"]
irb(main):002:0> str1
=> "hey"
irb(main):003:0> str2
=> "now"

我不确定在C#中我是否有可能做到这一点。

编辑:表示我只是将字符串“hey”和“now”分配给变量,这不是我想要的。想象一下:

irb(main):004:0> val1, val2 = get_two_values()
=> ["hey", "now"]
irb(main):005:0> val1
=> "hey"
irb(main):006:0> val2
=> "now"

现在,方法get_two_values返回字符串“hey”和“now”是任意的。实际上它可以返回任何两个值,它们甚至不必是字符串。

7 个答案:

答案 0 :(得分:14)

这在C#中是不可能的。

我能想到的最接近的事情是在索引

的同一行中使用初始化
strArr = new string[]{"foo","bar"};
string str1 = strArr[0], str2 = strArr[1];

答案 1 :(得分:4)

现实世界的用例提供了一种从函数返回多个值的便捷方法。所以它是一个Ruby函数,它在数组中返回固定数量的值,调用者希望它们在两个单独的变量中。这是该功能最有意义的地方:

first_name, last_name = get_info() // always returns an array of length 2

要在C#中表达,您可以在方法定义中使用out标记这两个参数,然后返回void

public static void GetInfo(out string firstName, out string lastName)
{
    // assign to firstName and lastName, instead of trying to return them.
}

所以称之为:

string firstName, lastName;
SomeClass.GetInfo(out firstName, out lastName);

这不太好。希望C#的未来版本允许这样做:

var firstName, lastName = SomeClass.GetInfo();

要启用此功能,GetInfo方法将返回Tuple<string, string>。这将是对语言的非破坏性更改,因为var的当前合法用法非常严格,因此上述“多重声明”语法尚无有效用途。

答案 2 :(得分:2)

  

我不确定我想要的是什么   可以用C#。

不是。

答案 3 :(得分:2)

答案 4 :(得分:1)

你可以在一行中完成,但不能作为一个语句。

例如:

int str1 = "hey"; int str2 = "now";

Python和ruby支持你正在尝试的任务; C#没有。

答案 5 :(得分:0)

不,但你可以初始化一个字符串数组:

string[] strings = new string[] {"hey", "now"};

虽然这对你来说可能不太有用。坦率地说,将它们分为两行并不难:

string str1 = "hey";
string str2 = "now";

答案 6 :(得分:0)

您现在可以将命名元组与C# 7一起使用。

{
  (string part1, string part2) = Deconstruct(new string[]{"hey","now"});
}

public (string, string) Deconstruct(string[] parts)
{
   return (parts[0], parts[1]);
}