Szukam czegoś, co pozwoli mi na łatwe sprawdzanie czy parametry metody są nullami. Najprostsze podejście to oczywiście:
public void Method(ObjectA a, ObjectB b, ObjectC c)
{
if(a == null) throw new ArgumentNullException("a");
if(b == null) throw new ArgumentNullException("b");
if(c == null) throw new ArgumentNullException("c");
}
Powyższe jest dla mnie trochę zbyt długie, więc poszukałem innych:
public void Method(ObjectA a, ObjectB b, ObjectC c)
{
Contract.Requires<ArgumentNullException>(a != null);
Contract.Requires<ArgumentNullException>(b != null);
Contract.Requires<ArgumentNullException>(c != null);
}
Nadal długie. To, co mnie zainteresowało, to koncepcja klasy Guard:
public void Method(ObjectA a, ObjectB b, ObjectC c)
{
Guard.ArgumentNotNull(a, nameof(a));
Guard.ArgumentNotNull(b, nameof(b));
Guard.ArgumentNotNull(c, nameof(c));
}
public static class Guard
{
public static void ArgumentNotNull(object o, string name)
{
if(o == null)
throw new ArgumentNullException(name);
}
}
Nie sprawdzałem czy się kompiluje, ale mniejsza z tym. Czy podejście z klasą Guard ma jakieś istotne wady? Jak dla mnie jest to bardziej eleganckie rozwiązanie niż robienie bloków ifów z throwami, aczkolwiek obawiam się że mogę nie dostrzegać czegoś istotnego.