IEnumerable<T> has no direct methods for mutating a collection, so unless you use reflection or do an upwards cast then an IEnumerable<T> is immutable.stevo_ said:Tell me about it, I've wanted this for ages - but I'd also like some immutable structures as well, perhaps the f# ones will be available in .net 4, even if I have to reference an f# assembly thats gac'd.
If you want to be really sure, then do this:
class {
List<foo> myMutableCollection = new List<foo>();
List<foo> myMutableCollection = new List<foo>();
public IEnumerable<foo> EnumerableFoo {
get {
return new ReadOnlyCollection(myMutableCollection);
}
}
}
get {
return new ReadOnlyCollection(myMutableCollection);
}
}
}
and now the mutablecollection can only be altered by the class or by reflection (and there's not much you can do to prevent reflection doing bad things)