На самом деле, я должен был спросить: как я могу сделать это и , чтобы соответствовать 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
, насколько я знаю, не существует. Есть ли другой способ задания поля (ссылки на) структуры с помощью отражения?