5
擴展方法使用.
運算符始終調用,即使對象爲空而不拋出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");
}
}
爲什麼在這種情況下不調用擴展方法?這是一個ambiguos功能嗎?
你可以看到在[嘗試羅斯林]編譯>反編譯的代碼(http://tryroslyn.azurewebsites.net/#f:r/K4Zwlgdg5gBAygTxAFwKYFsDcAobAHYAIwBswBjGM4gQxBBgAUAnAeyievWwG9sZ+YBEuRgpqyEQDcWYACYwAstUgAKAJR8BvATpgBBGNRgBeGBGDFiOXQOoA6QuswwA9C5gB3FkwDWITTbUAPwOTq7usiyoIBAA5Mie3j4BMAC+2On4RKQUVLT0BtxpuEI5osjiInl0MKgAHsg8KaUiYhIU0nIwjsgAFmAFhho62jYwAMIsECAsxKh2AOpMYGgAMpCoKgBEAJKx6JTUlqiyW2rWAumpQAAA) – Kobi
嘛'?.'運營商檢查是否值是'在*做任何事之前,爲什麼它應該工作?東西閱讀: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
具有根本不使用此對象的擴展方法的實際用法是什麼? –