Это странно, оно должно работать для ссылочного типа (класса) и не будет компилироваться для типа значения (struct).
Прежде всего, вам не нужно передавать ref IEnumerable в DoSomeWork,потому что вы не хотите изменять объект коллекции, изменяйте только элементы внутри.
Я пытался воспроизвести ваш случай, но он работает нормально, код ниже.Не могли бы вы дать более подробную информацию?
- Какую коллекцию вы передаете (List, Set)?
- Если Bar является свойством - как оно реализовано?
- Является ли Fooтип ссылки (класс)?
Рабочий код:
class Foo
{
public Foo(int bar, int baz)
{
Bar = bar;
Baz = baz;
}
public int Bar { get; set; }
public int Baz;
}
class Program
{
static void Main(string[] args)
{
var foos = new List<Foo>(new[]
{
new Foo(1, 2),
new Foo(3, 4),
new Foo(5, 6)
});
DoSomeWork(foos);
}
private static void DoSomeWork(IEnumerable<Foo> foos)
{
foreach (var foo in foos)
{
foo.Bar = 42;
foo.Baz = 42;
}
}
}