I want to Map a ValueTuple to a class using reflection. Documentation says that there is a Attribute attached to ValueTuple with parameters names (others than Item1, Item2, etc...) but I can't see any Attribute.
Disassembly shows nothing.
What's happens?
Example:
public static T ToStruct<T, T1,T2>(this ValueTuple<T1,T2> tuple) where T : struct
Via reflection can't get Item1, Item2 names to match with T fields via reflection.
You should have the TupleElementNames
attribute on the method created by the compiler.
See this code:
public class C {
public (int a, int b) M() {
return (1, 2);
}
}
Which compiles to:
[return: TupleElementNames(new string[] {
"a",
"b"
})]
public ValueTuple<int, int> M()
{
return new ValueTuple<int, int>(1, 2);
}
You can get that attribute using this code:
Type t = typeof(C);
MethodInfo method = t.GetMethod(nameof(C.M));
var attr = method.ReturnParameter.GetCustomAttribute<TupleElementNamesAttribute>();
string[] names = attr.TransformNames;