Examples:
1) public class CallingEqualsWithNullArg
{
public static void Main (string [] args)
{
CallingEqualsWithNullArg c = new
CallingEqualsWithNullArg ();
c.Equals (null);
}
}
This is bad.
2) public class CallingEqualsWithoutNullArg
{
public static void Main (string [] args)
{
CallingEqualsWithoutNullArg c = new
CallingEqualsWithoutNullArg ();
CallingEqualsWithoutNullArg c1 = new
CallingEqualsWithoutNullArg ();
c.Equals (c2);
}
}
This is good.
3) public class OverridingEqualsAndPassingNullArg
{
public override bool Equals (Object obj)
{
return this == null
}
public override int GetHashCode ()
{
return 1;
}
public static void Main (string [] args)
{
OverridingEqualsAndPassingNullArg o = new
OverridingEqualsAndPassingNullArg ();
o.Equals (null);
}
}
This is bad.
4) public class ImplementingNewEqualsAndPassingNullArg
{
public new bool Equals (Object obj)
{
if (obj == null)
return false;
else
return this == obj;
}
public static void Main (string [] args )
{
ImplementingNewEqualsAndPassingNullArg i = new
ImplementingNewEqualsAndPassingNullArg ();
i.Equals (null);
}
}
This should not make difference.
Reference:
http://findbugs.sourceforge.net/bugDescriptions.html#EC_NULL_ARG
Is there any reason the rule shouldn't also handle overloads ?
e.g. bool Rule.Equals (Rule rule)
Sebastien
Link for the rule is:
http://mono-soc-2007.googlecode.com/svn/trunk/nidhi/rules/Gendarme.Rules.Correctness/CallingEqualsWithNullArgRule.cs
Link for test-cases is:
http://mono-soc-2007.googlecode.com/svn/trunk/nidhi/rules/Gendarme.Rules.Correctness/Test/CallingEqualsWithNullArgTest.cs