Most developers expect property access to be as efficient as field access. However, if a property returns a copy of an array or collection, it will be much slower than a simple field access, contrary to the caller’s likely expectations. Therefore, such properties should be refactored into methods so that callers are not surprised by the unexpectedly poor performance.
This rule tracks calls to the following methods inside properties:
private List<string> _foo = new List<string> { "a", "b", "c" };
public IEnumerable<string> Foo // Noncompliant: expensive ToList call
{
get
{
return (string[])_foo.Clone();
}
}
private List<string> _foo = new List<string> { "a", "b", "c" };
public IEnumerable<string> GetFoo()
{
return (string[])_foo.Clone();
}