5
.
の拡張メソッドは、オブジェクトがnullの場合でも常に呼び出されます。NullReferenceException
をスローしません。オペレータ?.
を使用することで決して呼び出されません。例:オペレーター?
using System;
public class Program
{
public static void Main()
{
A a = null;
a.b(); // works
a?.b(); // doesn't work
}
}
public class A { }
public static class ext
{
public static void b(this A a)
{
Console.WriteLine("I'm called");
}
}
この場合、拡張メソッドが呼び出されないのはなぜですか?これはあいまいな機能ですか?
あなたは(http://tryroslyn.azurewebsites.net/#f:r/K4Zwlgdg5gBAygTxAFwKYFsDcAobAHYAIwBswBjGM4gQxBBgAUAnAeyievWwG9sZ+YBEuRgpqyEQDcWYACYwAstUgAKAJR8BvATpgBBGNRgBeGBGDFiOXQOoA6QuswwA9C5gB3FkwDWITTbUAPwOTq7usiyoIBAA5Mie3j4BMAC+2On4RKQUVLT0BtxpuEI5osjiInl0MKgAHsg8KaUiYhIU0nIwjsgAFmAFhho62jYwAMIsECAsxKh2AOpMYGgAMpCoKgBEAJKx6JTUlqiyW2rWAumpQAAA)[ロスリンをお試しください] – Kobi
まあ 'でコンパイル>逆コンパイルコードを見ることができますか?.'オペレータのチェックを値が'である場合null' *何かをする前に、なぜそれがうまくいくのですか?何か:http://stackoverflow.com/questions/847209/in-c-what-happens-when-you-call-an-extension-method-on-a-null-objectとhttps:// msdn。 microsoft.com/en-us/library/dn986595.aspx – Fabjan
このオブジェクトをまったく使用しない拡張メソッドを使用する実用的な使い方は何ですか? –