Могу ли я установить значение для структуры с помощью отражения без бокса?
На самом деле, я должен был спросить: как я могу это сделатьа также оставаться совместимым с CLS? Потому что я могу думать только о том, чтобы сделать это следующим образом, но используя либо__makeref
, FieldInfo.SetValueDirect
или простоSystem.TypedReference
в целом делает недействительным соответствие CLS.
// code illustrating the issue:
TestFields fields = new TestFields { MaxValue = 1234 }; // test struct with one field
FieldInfo info = fields.GetType().GetField("MaxValue"); // get the FieldInfo
// actual magic, no boxing, not CLS compliant:
TypedReference reference = __makeref(fields);
info.SetValueDirect(reference, 4096);
Соответствующий аналогSetValueDirect
являетсяSetValue
, но он принимает объект в качестве цели, поэтому моя структура будет упакована, что заставит меня установить значение для копии, а не исходную переменную.
Универсальный аналог дляSetValue
не существует, насколько я знаю. Есть ли другой способ задания поля (ссылки на) структуры с помощью отражения?