を避ける必要がありNullReferenceException
ます。現在、次のものがあります。
ISomeInterface interface = this.GetISomeInterfaceInstance();
(interface as ClassImplmentsISomeInterface).Method();
これは問題なく動作しますが、リスクがありますNullReferenceException
。1つの解決策は次のとおりです。
ISomeInterface interface = this.GetISomeInterfaceInstance();
ClassImplmentsISomeInterface instance = interface as ClassImplmentsISomeInterface;
if (instance != null)
instance.Method();
しかし、これは単純なチェックのために多くの余分なコードを生成します (resharper によると、数百の可能な NRE があります)。2 番目の解決方法は次のとおりです。
ISomeInterface interface = this.GetISomeInterfaceInstance();
if (interface is ClassImplmentsISomeInterface)
(interface as ClassImplmentsISomeInterface).Method();
しかし、is
実際as
にはバックグラウンドで使用しているため、キャストを 2 回行うことは避けたいと考えています。これは問題ですか?たとえば、C# コンパイラは、このパフォーマンスの問題を最適化するのに十分賢いでしょうか?
ここで見逃している他のテクニックはありますか?または、上記の方法のいずれかが望ましいですか?