Я вижу некоторое нечетное поведение после использования FirstOrDefault() в коллекции структур. Я изолировал его в этом случае. Эта программа не будет компилировать
using System;
using System.Linq;
namespace MyProgram {
public class Program {
static void Main() {
var users = new User[] {
new User() { UserGuid = Guid.NewGuid(), Username = "user01" },
new User() { UserGuid = Guid.NewGuid(), Username = "user02" }
};
var user = users.FirstOrDefault(u => u.Username == "user01");
Console.WriteLine(user == default(User) ? "not found" : "found");
}
}
public struct User {
public Guid UserGuid;
public string Username;
}
}
Ошибка компилятора является довольно загадочной:
Оператор '==' не может применяться к операндам типа "MyProgram.User" и "MyProgram.User"
Изменение структуры для класса отлично работает, но я не понимаю, почему я не могу сравнить экземпляр struct с экземпляром по умолчанию?