Hallo, Ich benutze Code Contracts unter C# und habe ein komisches Verhalten beobachtet: In einen Konstruktor wird durch Code Contracts überprüft/sichergestellt, dass der Übergabeparameter nicht null sein darf.
Dies klappt perfekt, solange die Klasse keinen
public static bool operator ==
und
public static bool operator !=
besitzt. Ist dies der Fall, wird keine Exception geworfen und die Anweisungen nach der Code-Contracts-Zeile werden ausgeführt.
Handelt es sich hierbei um einen Bug oder warum wird die Code-Contracts-Zeile in diesem Fall ignoriert?
Hier das Minimalbeispiel:
using System; using System.Diagnostics.Contracts; using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Test { public class MyTestObject { public MyTestObject(MyTestObject s) { Contract.Requires<ArgumentNullException>(s != null, "object must not be null"); int hashCode = s.GetHashCode();
Vielen Dank für die Antwort, das war es. Die Operatoren sind bei mir in einer Basisklasse definiert und natürlich komplexer. Blöderweise habe ich den dort gemachten Fehler unbewusst in das Minimalbeispiel mit übernommen.