Che funzionerà correttamente (nessuna eccezione). I metodi di estensione non usano chiamate virtuali (ad esempio, usano "call" l'istruzione, non "callvirt"), quindi non c'è controllo nullo a meno che non lo si scriva autonomamente nel metodo di estensione. Questo è in realtà utile, in alcuni casi:
public static bool IsNullOrEmpty(this string value)
{
return string.IsNullOrEmpty(value);
}
public static void ThrowIfNull<T>(this T obj, string parameterName)
where T : class
{
if(obj == null) throw new ArgumentNullException(parameterName);
}
ecc
Fondamentalmente, le chiamate alle chiamate statiche sono molto letterale - cioè
string s = ...
if(s.IsNullOrEmpty()) {...}
diventa:
string s = ...
if(YourExtensionClass.IsNullOrEmpty(s)) {...}
dove ci ovviamente non è un assegno nulla.
fonte
2009-05-11 08:37:31
Non fa mai male discutere di queste cose. – tpower
Felice che la domanda sia qui, mi ha salvato un po 'di tempo. – famousgarkin
Grazie per la domanda. Alcuni dei commenti su questo sito stanno diventando troppo negativi in quanto tpower dice che non fa mai male discutere. – nixon