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");
}
}
Почему метод расширения не вызывается в этом случае? Является ли это особенностью ambiguos?
Вы можете увидеть скомпилированный> декомпилированного кода на [Попробуйте Рослины] (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
Каково практическое использование метода расширения, который вообще не использует этот объект. –