Код: Выделить всё
// Path: Employee.cs
public class Employee(string name, DateTime? arrivalTime = null) {
public string Name = name;
public DateTime? ArrivalTime = arrivalTime;
}
Код: Выделить всё
// Path: Program.cs
class Program
{
static void Main(string[] args)
{
var testDate = DateTime.ParseExact(
"2024-12-10 10:30:00",
"yyyy-MM-dd HH:mm:ss",
System.Globalization.CultureInfo.InvariantCulture
);
var employees = new List([
new Employee("Matt"),
new Employee("John", testDate),
new Employee("Steve")
]);
foreach (var employee in employees)
{
if (employee.ArrivalTime == null) continue;
var arrivalDate = DateOnly.FromDateTime(employee.ArrivalTime!);
Console.WriteLine($"{employee.Name} arrives at {arrivalDate}.");
}
}
}
Я использую SDK .NET 8.0.404.
Однако я изменю код на
Код: Выделить всё
var arrivalDate = DateOnly.FromDateTime((DateTime)employee.ArrivalTime);
Код: Выделить всё
var arrivalDate = DateOnly.FromDateTime(employee.ArrivalTime ?? DateTime.Now);
По сути, мой вопрос: почему он не понимает, что подавление значений null безопасно в этом контексте? Мой LSP понимает, что это значение, допускающее значение NULL, если я удаляю проверку NULL, и предупреждает меня об этом, но даже с проверкой NULL он не позволяет мне использовать оператор !. Я неправильно понимаю использование оператора?
Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/792 ... s-expected
Мобильная версия