I'm trying ValueTuple Class in C#, and i have a doubt about properties naming, let's see:
If instantiate a ValueTuple declaring the object like this: var tuple1 = (Name: "Name1", Age: 25);
We can name the properties,
but, like this: ValueTuple<string,int> tuple2 = (Name: "Name1", Age: 25);
we get a warning that says the names are ignored,so
We should type: ValueTuple<string,int> tuple2 = ("Name1",25);
Then the properties will be tuple2.Item1
and tuple2.Item2
Can someone explain this newbie the reason about this?
Than you in advantage
There are two different "kinds" of tuples involved here: the .NET
ValueTuple<...>
types, and C# tuple types. C# tuple types can have element names;ValueTuple<...>
types can't. (There's simply nowhere in the type system for that to live in a normal way.)At execution time, a value is only aware of its .NET type. For example, if you use:
then
DoSomethingWithValue
wouldn't be able to distinguish between the two tuple values at all. The information is only available at compile-time.Information about element names for things like parameters and return types is propagated via attributes that the C# compiler consumes. So for example, a method declared like this:
is compiled in IL as if it had been declared like this:
The C# language defines appropriate conversions between the .NET types and the C# tuple types to make it as seamless as possible.
In terms of how to use tuples, I'd use the C# tuple types as far as you can. Naming the tuple elements makes a huge difference in usability.
In short: No, you can't create ValueTuples with named fields like this.
In detail: Have a look at Name ValueTuple properties when creating with new - your question is answered very well there.
What you want to define is
what you are defining is
Look at the difference between in Type you are defining. Both are two different things if you take the name.