オブジェクトの配列を返すコードがいくつかあります。
簡単な例を次に示します。
string[] GetTheStuff() {
List<string> s = null;
if( somePredicate() ) {
s = new List<string>(); // imagine we load some data or something
}
return (s == null) ?
new string[0] :
s.ToArray();
}
問題は、どのくらいの費用がかかるnew string[0]
かです。
null を返して、「何も見つからなかった」ことを示す有効な方法として呼び出し元に null を受け入れさせる必要がありますか?
注意: これは何百回も実行されるループで呼び出されているため、この種の最適化が実際には「時期尚早」ではないと私が考える数少ないケースの 1 つです。
PS: 時期尚早だったとしても、それがどのように機能するか知りたいです :-)
アップデート:
最初にスペースを使用するかどうか尋ねたとき、「C/C++」の観点から物事を考えていました.Cのように、書き込みchar a[5];
はスタックに5バイトのスペースchar b[0];
を割り当て、0バイトを割り当てます。
これが .NET の世界に適していないことはわかっていますが、これがコンパイラまたは CLR によって検出され、最適化されるものであるかどうかに興味がありました。わかりますか?) 収納スペースが必要です。