Я просто столкнулся с этим сообщением об ошибке во время работы в С#
Свойство или индексатор не может передаваться как параметр out или ref
Я знал, что вызвало это, и быстро разработало локальную переменную правильного типа, вызвав функцию с ней как параметр out
/ref
, а затем вернув ее обратно в свойство:
RefFn(ref obj.prop);
превращается в
{
var t = obj.prop;
RefFn(ref t);
obj.prop = t;
}
Очевидно, что это не сработает, если свойство не поддерживает get и устанавливает в текущем контексте.
Почему С# не делает это для меня?
Единственные случаи, когда я могу думать о том, где это может вызвать проблемы, следующие:
- резьбонарезной
- исключения
Для потоковой передачи это преобразование влияет на то, когда происходит запись (после вызова функции или в вызове функции), но я скорее подозреваю, что любой код, который рассчитывает на это, будет немного сочувствовать, когда он сломается.
Для исключений, беспокойство будет; что произойдет, если функция назначит одному из нескольких параметров ref
, чем бросает? Любое тривиальное решение приведет к тому, что все или ни один из параметров не будет назначен, когда некоторые из них должны быть, а некоторые не должны быть. Снова я не думаю, что это будет поддерживать использование языка.
Примечание. Я понимаю механику того, почему генерируются эти сообщения об ошибках. То, что я ищу, является основанием для того, почему С# не выполняет автоматически тривиальное обходное решение.