Can I assign each value in an array to separate variables in one line in C#? Here's an example in Ruby code of what I want:
irb(main):001:0> str1, str2 = ["hey", "now"]
=> ["hey", "now"]
irb(main):002:0> str1
=> "hey"
irb(main):003:0> str2
=> "now"
I'm not sure if what I'm wanting is possible in C#.
Edit: for those suggesting I just assign the strings "hey" and "now" to variables, that's not what I want. Imagine the following:
irb(main):004:0> val1, val2 = get_two_values()
=> ["hey", "now"]
irb(main):005:0> val1
=> "hey"
irb(main):006:0> val2
=> "now"
Now the fact that the method get_two_values
returned strings "hey" and "now" is arbitrary. In fact it could return any two values, they don't even have to be strings.
You can do it in one line, but not as one statement.
For example:
Python and ruby support the assignment you're trying to do; C# does not.
You can use named tuples with C# 7 now.
The real-world use case for this is providing a convenient way to return multiple values from a function. So it is a Ruby function that returns a fixed number of values in the array, and the caller wants them in two separate variables. This is where the feature makes most sense:
To express this in C# you would mark the two parameters with
out
in the method definition, and returnvoid
:And so to call it:
It's not so nice. Hopefully some future version of C# will allow this:
To enable this, the
GetInfo
method would return aTuple<string, string>
. This would be a non-breaking change to the language as the current legal uses ofvar
are very restrictive so there is no valid use yet for the above "multiple declaration" syntax.This is not possible in C#.
The closest thing I can think of is to use initialization in the same line with indexs
You can do this in C#
or you can be fancy like this
It's not.