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