Если вы используете достаточно новую версию C# (7.2+), и эти переменные являются локальными или полевыми, то вы можете использовать ref locals
;
(!RTL ? ref padLeft : ref padRight) = NearBorder.LineWidth;
См. sharplab ссылка для примера. Обратите внимание, что предложение документов (которые обозначают это как conditional ref
) указывают, что это все еще предложение. Проблема Championed GitHub по-прежнему открыта , но, похоже, указывает на то, что единственное, чего не хватает, - это истинной спецификации. Этот комментарий по этому вопросу предполагает, что все это было реализовано как часть большой темы ref readonly
.
Кроме этого, этот код работает для меня как в SharpLab, так и локально в VS2019 (последний, без предварительного просмотра, с использованием do tnet core 3.0)
Если эти переменные были полями, вы может также использовать ref return
и инкапсулировать logi c в функцию. Например:
// class fields
int padLeft, padRight;
// ref returning method
private ref int GetPad() => ref (!RTL ? ref padLeft : ref padRight);
// actually use it
void SetPad() {
// assignment to a method!
GetPad() = NearBorder.LineWidth;
}
Для получения дополнительной информации о концепции ref locals
и ref returns
(первоначально являющейся частью C# 7), см. Эту статью MSDN .