问题
Are there any practical uses of the TypedReference struct that you would actually use in real code?
EDIT: The .Net framework uses them in overloads of Console.WriteLine
and String.Concat
which build an array from an __arglist
parameter and pass it to the normal params
overload. Why do these overloads exist?
回答1:
Are there any practical uses of the TypedReference struct that you would actually use in real code?
Yes. I'd use them if I needed interoperability with C-style variadic methods.
Why do these overloads exist?
They exist for interoperability with callers who like to use C-style variadic methods.
回答2:
This appears to be a very old question, but I'd like to add one more use-case: when you have a struct and want to set its variable through reflection, you would always operate on the boxed value and never change the original. This is useless:
TestFields fields = new TestFields { MaxValue = 1234 };
FieldInfo info = typeof(TestFields).GetField("MaxValue");
info.SetValue(fields, 4096);
// result: fields.MaxValue is still 1234!!
This can be remedied with implied boxing, but then you loose type safety. Instead, you can fix this with a TypedParameter
:
TestFields fields = new TestFields { MaxValue = 1234 };
FieldInfo info = fields.GetType().GetField("MaxValue");
TypedReference reference = __makeref(fields);
info.SetValueDirect(reference, 4096);
// result: fields.MaxValue is now indeed 4096!!
来源:https://stackoverflow.com/questions/1711393/practical-uses-of-typedreference