Eredeti (Java-s) ötlet itt: http://cesjava.freeblog.hu/archives/2009/10/13/a_NUllPointerException_transzparens_kezelese/.
Saját továbbgondolás (C#):
public static class NullReferenceCheckExtensions
{
public static void CheckIfNull<T>(this T instance)
where T : class
{
if (instance == null)
{
string argumentInfo = TryGetArgumentInfo();
if (argumentInfo == null)
argumentInfo = string.Format("An instance of type '{0}'.", typeof(T).FullName);
throw new ArgumentNullException(argumentInfo);
}
}
private static string TryGetArgumentInfo()
{
try
{
var st = new System.Diagnostics.StackTrace(true);
var callerFrame = st.GetFrame(2);
var fileName = callerFrame.GetFileName();
var fullSource = System.IO.File.ReadAllLines(fileName);
var info = fullSource[callerFrame.GetFileLineNumber() - 1].Trim();
return info;
}
catch
{
return null;
}
}
}
Használat:
public void MyMethod(string name, Uri uri)
{
name.CheckIfNull();
uri.CheckIfNull();
}

2 megjegyzés:
milyen a komplex megoldás? ;)
:)
Ez inkább egy ötlet tovább (túl?) gondolása, mintsem produkciós környezetbe javasolt megoldás.
Arra mentem rá, hogy hogy lehet a kliensoldali kódot a lehető legegyszerűbbé tenni.
Mindennapi gyakorlatban valószínű jobb megoldás egyszerűen string paraméterként átadni az épp vizsgált paraméter nevét - kihagyható az egész stack walk-os mágia.
Megjegyzés küldése