Tôi đang cố gắng sử dụng toán tử có điều kiện, nhưng tôi bị treo lên trên loại mà nó nghĩ kết quả sẽ là.Gõ kết quả với toán tử có điều kiện trong C#
Dưới đây là một ví dụ mà tôi đã trù định để hiển thị các vấn đề tôi đang gặp:
class Program
{
public static void OutputDateTime(DateTime? datetime)
{
Console.WriteLine(datetime);
}
public static bool IsDateTimeHappy(DateTime datetime)
{
if (DateTime.Compare(datetime, DateTime.Parse("1/1")) == 0)
return true;
return false;
}
static void Main(string[] args)
{
DateTime myDateTime = DateTime.Now;
OutputDateTime(IsDateTimeHappy(myDateTime) ? null : myDateTime);
Console.ReadLine(); ^
} |
} |
// This line has the compile issue ---------------+
Trên dòng nêu trên, tôi nhận được lỗi biên dịch sau:
Loại biểu thức điều kiện không thể được xác định bởi vì không có chuyển đổi tiềm ẩn nào giữa '< null>' và 'System.DateTime'
Tôi nhầm lẫn vì tham số này là một loại không có giá trị (DateTime?). Tại sao nó cần phải chuyển đổi? Nếu nó là null sau đó sử dụng, nếu đó là một thời gian ngày sau đó sử dụng đó.
Tôi đã theo ấn tượng rằng:
condition ? first_expression : second_expression;
là giống như:
if (condition)
first_expression;
else
second_expression;
Rõ ràng đây không phải là trường hợp. Lý do đằng sau điều này là gì?
(Chú ý:.?. Tôi biết rằng nếu tôi làm cho "myDateTime" một DateTime nullable sau đó nó sẽ làm việc Nhưng tại sao nó cần nó
Như tôi đã nói ở trên đây là một ví dụ contrived Trong ví dụ thật của tôi " myDateTime "là giá trị được ánh xạ dữ liệu không thể thực hiện được.)
thể trùng lặp của [nhiệm vụ điều hành có điều kiện với Nullable loại?] (Http://stackoverflow.com/questions/75746/conditional-operator-assignment-with-nullablevalue-types) –
nawfal
thể trùng lặp của [loại Nullable và toán tử ternary: tại sao \ '? 10: null \ 'bị cấm?] (Http://stackoverflow.com/questions/858080/nullable-types-and-the-ternary-operator-why-is-10-null-forbidden) –