UnsafeAccessor не обновляет частное поле при нацеливании на структуру в .NET 8C#

Место общения программистов C#
Ответить
Anonymous
 UnsafeAccessor не обновляет частное поле при нацеливании на структуру в .NET 8

Сообщение Anonymous »

Я тестирую новый атрибут UnsafeAccessor в .NET 8, чтобы получить некоторое внутреннее состояние сторонней библиотеки для помощника модульного тестирования.
Библиотека использует внутреннюю структуру внутри себя для хранения некоторых данных конфигурации. Я пытаюсь изменить частное поле int в этой структуре с помощью UnsafeAccessorKind.Field.
Вот упрощенное воспроизведение настройки:

Код: Выделить всё

public struct GridPoint
{
private int _x;

public int X => _x;

public GridPoint(int x)
{
_x = x;
}
}
А вот мое определение метода доступа и тестовый код:

Код: Выделить всё

using System.Runtime.CompilerServices;

public class Program
{
[UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_x")]
public extern static ref int GetX(GridPoint target);

public static void Main()
{
var p = new GridPoint(10);

// Try to update _x to 99
ref int xRef = ref GetX(p);
xRef = 99;

Console.WriteLine($"Expected: 99, Actual: {p.X}");
}
}
Выход:

Ожидается: 99, фактическое: 10


Подробнее здесь: https://stackoverflow.com/questions/798 ... t-in-net-8
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»