Re[5]: Передать this в виде object
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.03.24 10:09
Оценка:
Здравствуйте, _FRED_, Вы писали:
_FR>Рискну предполдожить, что у топикстартера есть разные типы структур, которые хочется (или нужно) менять в одном единственном методе и передавать эти структуры соответственно приходится унифицированно через "object".
_FR>Тогда мог бы подойти свой "Variant" c ref-ссылками разного типа.
Да, нужна будет ref struct и ref scoped параметр такого метода.
Но это всё выглядит крайне странно. Например, если бы мне потребовалось, скажем, унифицированно менять поле x в структурах разных типов, то очевидным решением является вот такое:
public interface IXSettable
{
  public int X{get;set;}
}

public struct Point: IXSettable
{
  int x;
  int y;
  int X {get => x; set => x = value; }
}
public struct IntWrapper: IXSettable
{
  public IntWrapper(int v) => x = v;
  private int x;
  public int X {get => x; set => x = value; }
}

public static void MoveX<T>(ref T t)
  where T: IXSettable, struct
    =>   t.X += 1;


public static void Main()
{
  var p = new Point(); (p.x, p.y) = (17, 42);
  MoveX(ref p);
  var w = IntWrapper(x);
  MoveX(ref w); 
}

_FR>P.S.
_FR>Это очевидно опечатка и unsafe выше не нужен.
Да, конечно, правил по месту.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.