For classes, the == operator uses reference equality. Of course, structs are value types, so they can’t be compared by reference. There is no default implementation of == for structs because memberwise comparison isn’t always a valid comparison, depending on the type.
You can instead use the Object.Equals method, which does compare memberwise:
Console.WriteLine(user.Equals(default(User)) ? "not found" : "found");
Or you could just implement == to call Object.Equals:
public static bool operator ==(User lhs, User rhs)
{
return lhs.Equals(rhs);
}
However, the default implementation of Equals for structs uses reflection, and so is very slow. It would be better to implement Equals yourself, along with == and != (and possibly GetHashCode too):
public override bool Equals(Object obj)
{
return obj is User && Equals((User)obj);
}
public bool Equals(User other)
{
return UserGuid == other.UserGuid && Username == other.Username;
}
public static bool operator ==(User lhs, User rhs)
{
return lhs.Equals(rhs);
}
public static bool operator !=(User lhs, User rhs)
{
return !lhs.Equals(rhs);
}