2012-11-11 30 views
7

Tôi cố gắng để rút ngắn mã của tôi bằng cách sử dụng ngắn nếu:C# ngắn nếu tuyên bố không làm việc với int? (Int = null)

int? myInt=myTextBox.Text == "" ? null : 
    Convert.ToInt32(myTextBox.Text); 

Nhưng tôi nhận được lỗi sau: Loại biểu thức điều kiện không xác định được vì không có chuyển đổi ngầm giữa '' và 'int'

các công trình sau đây:

int? myInt; 
if (myTextBox.Text == "") //if no text in the box 
    myInt=null; 
else 
    myInt=Convert.ToInt32(myTextBox.Text); 

và nếu tôi thay thế 'null' trong số nguyên (nói '4') nó cũng hoạt động:

int? myInt=myTextBox.Text == "" ? 4: 
    Convert.ToInt32(myTextBox.Text); 
+1

Đây không phải là một đoạn ngắn nếu, nhưng một nhà điều hành ternary. – MarioDS

+1

Truyền 'int' sang' int? '. – CodesInChaos

+0

Đây là bản sao: ( – nawfal

Trả lời

7

Hãy thử điều này thay vì:

int? myInt=myTextBox.Text == "" ? (int?)null : Convert.ToInt32(myTextBox.Text); 
+3

Các bạn đều không đưa ra nhiều về int.TryParse hm :)? – KroaX

0
int? myInt=myTextBox.Text == "" ? (int?)null : 
    Convert.ToInt32(myTextBox.Text); 
+0

Mặc dù _may_ này trả lời một cách kỹ thuật câu hỏi, câu trả lời của bạn sẽ được cải thiện đáng kể nếu bạn cũng nêu _why_ nó. – Ben

+0

@ Ben, cảm ơn vì đã bình luận. Tôi nghĩ điều đó rõ ràng. –

1

My Tôi đề nghị sau đây?

int value; 
int? myInt = (int.TryParse(myTextBox.Text, out value)) ? value : default(int?); 
2

Điều chúng tôi cần là cho trình biên dịch biết rằng cả hai phần của biểu thức if (nếu và khác) đều giống nhau. Và đó là lý do tại sao C# chứa từ mặc định:

int? myInt=myTextBox.Text == "" 
    ? default(int?) 
    : Convert.ToInt32(myTextBox.Text); 
0
int number =!string.IsNullOrEmpty(temp) ? Convert.ToInt32(temp) : (int?) null; 
Các vấn đề liên quan