Practical uses of TypedReference

前端 未结 2 1249
被撕碎了的回忆
被撕碎了的回忆 2020-12-15 16:57

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

相关标签:
2条回答
  • 2020-12-15 17:29

    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.

    0 讨论(0)
  • 2020-12-15 17:37

    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!!
    
    0 讨论(0)
提交回复
热议问题