Das ist seltsam, es sollte für den Referenztyp (Klasse) funktionieren, aber für den Werttyp (Struktur) würde es nicht kompiliert.
Zunächst einmal brauchen Sie ref IEnumerable nicht an DoSomeWork zu übergeben, da Sie das Sammlungsobjekt nicht ändern wollen, sondern nur die Elemente darin.
Ich habe versucht, Ihren Fall zu reproduzieren, aber es funktioniert gut, Code unten. Könnten Sie einige weitere Details geben?
- Welche Sammlung übergeben Sie (Liste, Set)?
- Wenn Bar Eigentum ist - wie wird es umgesetzt?
- Ist Foo ein Referenztyp (Klasse)?
Arbeitscode:
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;
}
}
}