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;
    }

0 ответов

Другие вопросы по тегам