我可以将数组中的每个值分配给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”是任意的。实际上它可以返回任何两个值,它们甚至不必是字符串。
答案 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]);
}