Как я могу получить объект, созданный при ссылке, и при этом обновить базу? - PullRequest
0 голосов
/ 11 июля 2020

Я знаю, что вопрос не очень ясен, я даже не знаю, какие слова могут быть, чтобы описать то, что я пытаюсь сделать, но этот пример должен прояснить его.

Скажи это бит кода

public string Underscores;
public string Spaces 
{ 
    get => Underscores.Replace('_', ' '); 
    set => Underscores = value.Replace(' ', '_'); 
}

В этом примере значение Underscores хранится в памяти, а значение Spaces нет, а вместо этого генерируется на лету при обращении к. Если значение Spaces изменяется, значение Underscored изменяется соответственно. Я хочу распространить эту концепцию на структуры и классы:

struct StringStruct
{
    public string Value { get; set; }
}

...

public string Underscores;
public StringStruct Spaces
{
    get => new StringStruct { Value = Underscores.Replace('_', ' ') }; 
    set => UnderScores = value.Value.Replace(' ', '_') };
}

Он отлично работает, если я перезаписываю Spaces новым StringStruct, но попытка изменить значение свойства Space Value приводит к компилятору ошибка, поскольку это не переменная. Тот же сценарий, но где StringStruct является классом, ошибки не возникает, но изменение будет проигнорировано, а подчеркивание останется прежним.

Примеры были составлены для объяснения, а не для того, что я на самом деле пытаюсь делать.

1 Ответ

0 голосов
/ 11 июля 2020

value и Underscores в вашем коде - это не строки, а экземпляры StrigStruct. Таким образом, вы не можете вызвать для них метод string.Replace().

Это решит вашу проблему.

public StringStruct Underscores;
public StringStruct Spaces
{
    get => new StringStruct { Value = Underscores.Value.Replace('_', ' ') };
    set => Underscores = new StringStruct { Value = value.Value.Replace(' ', '_') };
}

Edit

После того, как OP отредактировал сообщение с новой информацией .

Причина, по которой вы получаете ошибку Cannot modify the return value of 'expression' because it is not a variable, заключается в том, что вы используете struct для своего StringStruct вместо class, поскольку struct не является ссылочным типом в отличие от class. Подробнее здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...