2009. december 5., szombat

Nullérték-vizsgálat egyszerűen

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:

sandor írta...

milyen a komplex megoldás? ;)

Molnár Gergő írta...

:)

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