2013-02-12 35 views
7

tôi muốn làm một cái gì đó như thế này sử dụng C#:C# khai báo biến thành câu lệnh if

if (i == 0) 
{ 
button a = new button(); 
} 
else 
{ 
TextBlock a = new TextBlock(); 
} 
mainpage.children.add(a); 

Nhưng tôi nhận được một lỗi mà

Lỗi 1 Tên 'a' không tồn tại trong ngữ cảnh hiện tại

Bất kỳ ý tưởng nào?

cảm ơn bạn trước!

Trả lời

15

Bạn cần một lớp cơ sở chung mà cả hai buttonTextblock lấy được từ đó và cần được khai báo bên ngoài câu hỏi if nếu nó được truy cập sau khi if hoàn tất. Control có thể?

Control a; 
if (i == 0) 
{ 
a = new button(); 
} 
else 
{ 
a = new TextBlock(); 
} 
mainpage.children.add(a); 

Không biết bạn đang sử dụng bộ công cụ kiểm soát cụ thể nào (WPF có thể?) Tôi không thể tư vấn thêm. Nhưng tôi muốn nhìn vào chữ ký cho Add để có được một đầu mối - tham số được khai báo là gì?

+0

Tuy nhiên, câu hỏi là nhiều hơn về [phạm vi] (http://msdn.microsoft.com/en-us/library/aa691132 (v = vs.71). aspx). Tiêu đề: _ "khai báo biến thành câu lệnh if" _ exception: _ "Tên 'a' không tồn tại trong ngữ cảnh hiện tại" _ –

+0

@TimSchmelter Đó là tách lông, thành thật mà nói. Điều này giải quyết rằng, có lẽ trong một cách xoay vòng hướng người dùng đến một phương án thay thế và nghĩ rằng họ là người mới, nhưng vẫn còn. –

+0

Cảm ơn bạn! nó totaly làm việc! –

6

Hãy thử khai báo a ngoài phạm vi của if/else. Như thế này:

Control a; 
if (i == 0) 
{ 
    a = new button(); 
} 
else 
{ 
    a = new TextBlock(); 
} 
mainpage.children.add(a); 
+0

Cảm ơn bạn! nó totaly làm việc! –

4

Bạn cần khai báo biến của bạn trong phạm vi gốc và cho nó một lớp cơ sở chung. Lớp cơ sở chung cho System.Windows.Controls.TextBlockSystem.Windows.Controls.Button có thể là ví dụ System.Windows.UIElement hoặc System.Windows.FrameworkElement. Vì vậy, mã của bạn có thể trông giống như sau:

UIElement a; 
if (i == 0) 
{ 
    a = new Button(); 
} 
else 
{ 
    a = new TextBlock(); 
} 
mainpage.children.add(a); 
+0

Cảm ơn bạn! nó totaly làm việc! –

Các vấn đề liên quan