I have a structure in C#:
public struct UserInfo { public string str1 { get; set; } public string str2 { get; set; }
See Jon Skeet's answer - binary operations like ^ are not good, they will often generate colliding hash!
^