Можно ли передать наблюдаемую коллекцию в качестве параметра ref?

Можно ли передать наблюдаемую коллекцию в качестве ссылочного параметра?

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

Это точное сообщение об ошибке, которое я получаю:

"Свойство indexer нельзя передавать в качестве параметра out или ref".


person Relativity    schedule 07.02.2011    source источник
comment
Эй, чувак, тебе придется еще немного поработать, если тебе нужна помощь. Нам понадобится простой код, который по-прежнему показывает ошибку, сообщение об ошибке, которое вы получаете, будь то ошибка во время выполнения или во время компиляции, и все такое. Не могли бы вы отредактировать свой пост, чтобы включить их?   -  person Chris Pfohl    schedule 07.02.2011
comment
В .NET вам не нужно делать это ни для чего, кроме типов структур/значений. Все типы, которые не являются примитивными (ссылочными типами), передаются по ссылке автоматически, и в большинстве случаев, если вы передаете типы значений по ссылке или вне, ваш дизайн, вероятно, нуждается в доработке.   -  person    schedule 07.02.2011
comment
@Will: не совсем так. В C# никакие типы не передаются по ссылке автоматически. Подумайте о Dictionary<string, string>.TryGetValue("blah", out x); Несмотря на то, что строка является ссылочным типом, Dictionary<string, string>.TryGetValue("blah", x); не работает.   -  person R. Martinho Fernandes    schedule 07.02.2011
comment
@Мартин, я не совсем понял. Я обнаружил, что многие... новые программисты, назовем их, думают, что единственный способ передать ссылочный тип так, чтобы он не передавался по значению, - это отправить его как ссылку. Кроме того, я пропустил неизменяемые типы, да. И анти-шаблон, в котором вы хотите вернуть несколько значений из вызова метода, и поэтому вам нужно передать все ваши переменные как ref (или out, в зависимости от метода) и т. д. и т. д. и т. д.   -  person    schedule 07.02.2011


Ответы (1)


Да, вы можете передать ObservableCollection по ссылке. Однако вы не можете передать this по ссылке для любого класса. (Вы можете для структуры, но, пожалуйста, не делайте этого.)

Если у вас возникли проблемы с передачей обычной переменной по ссылке, опубликуйте код.

РЕДАКТИРОВАТЬ: я только что видел ваше редактирование... и сообщение об ошибке компилятора довольно ясно. Вы не можете передавать свойства или индексаторы по ссылке. Итак, вы не можете сделать:

Foo(ref x.SomeProperty);

но вы можете сделать:

var tmp = x.SomeProperty;
Foo(ref tmp);
x.SomeProperty = tmp;
person Jon Skeet    schedule 07.02.2011
comment
мой ObservableCollection относится к классу типов. - person Relativity; 07.02.2011
comment
@Anish: Смотрите мой отредактированный ответ. Ваш вопрос не был ясен раньше - теперь он понятен, поэтому, надеюсь, мой ответ будет более полезным. Если нет, пожалуйста, опубликуйте свой фактический код, а не просто сообщение об ошибке. - person Jon Skeet; 07.02.2011