Не видя класса Card
, я не могу быть уверен, но я подозреваю, что свойство rank
для Card
- это свойство, а не поле.Другими словами, у вас есть объявление
public class Card
{
public int rank { get; set; }
}
, а не
public class Card
{
public int rank;
}
Но синтаксис свойства (мой первый пример) на самом деле является синтаксическим сахаром, который переписывается компилятором в нечто вроде
public class Card
{
private int _rank;
public int get_rank()
{
return rank;
}
public int set_rank(int rank)
{
_rank = rank;
}
}
Это означает, что свойство rank
в Card
вовсе не int
, а обертка вокруг двух методов.Поскольку rank
не является int
, вы не можете передать его по ссылке.
А теперь элегантное решение:
Если метод ModifyRank
устанавливает только значениес его параметром ref вы можете упростить вторую строку кода до
deck_of_cards[4].rank = 8;
, что намного понятнее любому читателю.И если ваш ModifyRank
метод делает что-то особенное, вы можете добавить этот метод расширения к некоторому статическому классу:
public static void ModifyRank(this Card c, int newRank)
{
int rank = c.rank;
ModifyRank(ref rank, newRank);
c.rank = rank;
}
Это позволит вам заменить вторую строку на
deck[4].ModifyRank(8);