Early this morning, I installed the latest update of the Roslyn Code Analyzers in Visual Studio 2019 and was immediately welcomed with this warning:
Properties should not return arrays.
Something you need to know about me. I have this weird obsession of needing to remove all the “squigglies” that Visual Studio barks about from my code! This usually results in me just suppressing the error or warning, but this warning intrigued me, and I wanted to dig a little deeper.
I will share with you the highlights that convinced me to stop having properties return arrays. These highlights are taken straight from Eric Lippert’s article:
You probably should not return an array as the value of a public method or property, particularly when the information content of the array is logically immutable.
Why? Because now the caller can take that array and replace the contents of it with whatever they please. Returning an array means that you have to make a fresh copy of the array every time you return it.Eric Lippert
Things that are immutable should not change.
An array is a collection of variables. The caller doesn’t want variables, but it’ll take them if that’s the only way to get the values. But in this case, as in most cases, neither the callee nor the caller wants those variables to ever vary. Why on earth is the callee passing back variables then?
Variables vary. Therefore, a fresh, different variable must be passed back every time, so that if it does vary, nothing bad happens to anyone else who has requested the same values.Eric Lippert
So what should I being doing?
If you are writing such an API, wrap the array in aEric Lippert
ReadOnlyCollectionand return an
IListor something, but not an array.
I am going to take some more time and noodle on this, I would be interested to hear others thoughts on this, but in the meantime, I no long return arrays, but rather an
No more “squiggles” … mission accomplished!