CS 1612: возвращаемое значение не является переменной и поэтому не может быть изменено
рассмотрим эту треску здесь:
public ref struct RefValue <T> where T : unmanaged
{
public ref readonly T Item1;
public RefTuple(ref T item1)
{
Item1 = ref item1;
}
}
//This function gets a 'ref' directly to the dictionary value
//and 'RefValue<T>' is a ref-struct which has a 'ref readonly field T'
//to store args passed as 'ref param'
public RefValue<Stats> GetStatsByType(TileType t)
{
return new RefValue<Stats>(ref CollectionsMarshal.GetValueRefOrAddDefault(_typeStats, t, out _));
}
//THIS LINE HERE:!
//says: CS 1612: The return value is not a variable and therefore cannot be changed
public ref readonly Stats ExampleAsRef => ref GetStatsByType(TileType.Blue).Item1;
Я не понимаю, почему... Я сохраняю все в синхронизации/выравнивании, например: свойство возвращает ref только для чтения, функция возвращает ref только для чтения, значение «T» для «RefValue» является ref только для чтения, как так получилось, что он действительно хочет принять это, я не совсем понимаю :/
Было бы супер круто, если бы у кого-то был ответ на этот вопрос, а у меня нет..
С наилучшими пожеланиями
Статистика — это простая структура с некоторыми примитивными полями. PS: я использую .NET 7 RC2, mac OS X 10.15, C#11.
PS2: здесь недостающие типы:
public struct Stats
{
/// <summary>
/// Count-Clicks, with maxTime inbetween them
/// </summary>
public int? Click;
public int? Swaps;
public int? Match;
public int? RePainted;
public int? Destroyed;
public Stats()
{
Destroyed = 0;
Click = 0;
Swaps = 0;
Match = 0;
RePainted = 0;
}
}
public enum TileType : short
{
Red, Blue, Green, Purple, Violet,
Length = Violet + 1, Empty = -1,
}
Я также пробовал это, но безуспешно:
public ref readonly Stats GetStatsByType(TileType t)
{
return ref (new RefTuple<Stats>(ref CollectionsMarshal.GetValueRefOrAddDefault(TypeStats, t, out var existedB4))).Item1;
}