2012-07-31 12 views
19

khi gửi lại các thông số nhận được lỗi nàyLỗi: Thông số Out phải được chỉ định trước khi kiểm soát lá phương pháp hiện tại

Lỗi: Thông số Out phải được chỉ định trước khi kiểm soát lá phương pháp hiện

Mã là

public void GetPapers(string web, out int Id1, out int Id2) 
    { 
     SqlConnection conn = new SqlConnection(ConnectionString()); 
     conn.Open(); 
     SqlCommand cmd = new SqlCommand("GetPapers", conn); 
     cmd.CommandType = CommandType.StoredProcedure; 

     cmd.Parameters.Add(new SqlParameter("@URL", String(web))); 

     SqlDataReader rdr = cmd.ExecuteReader(); 

     if (rdr.Read()) 
     { 
      Id1 = (int)rdr["ID1"]; 
      Id2 = (int)rdr["ID2"]; 
     } 

     rdr.Close(); 
    } 

gọi nó như

012.351.
GetPapers(web, out Id1, out Id2); 

liên quan đến câu hỏi này

Related question

+1

Tham số ngoài phải được chỉ định dọc theo tất cả các đường dẫn trước khi điều khiển rời khỏi phương thức. Vì bạn có một tuyên bố if, họ có thể không được chỉ định. –

+3

Bạn muốn các giá trị là gì nếu 'rdr.Read()' trả về false? –

+0

@JonSkeet mã chỉ hoạt động khi có một cái gì đó trong DB, giống như một người nhận sự kiện –

Trả lời

28

Bạn đang chuyển nhượng Id1Id2 bên trong một câu lệnh if và trình biên dịch không thể xác định xem nó sẽ được gán một giá trị tại thời gian chạy, do đó lỗi.

Bạn có thể gán cho họ một số giá trị mặc định trước câu lệnh if. Cái gì đó như.

Id1 = 0; 
Id2 = 0; 

if (rdr.Read()) 
{ 
    Id1 = (int)rdr["ID1"]; 
    Id2 = (int)rdr["ID2"]; 
} 

hoặc chỉ định một số giá trị mặc định trong else một phần của điều kiện của bạn.

Thông số loại out phải được chỉ định một số giá trị, trước khi điều khiển rời khỏi chức năng. Trong trường hợp của bạn, trình biên dịch không thể xác định xem các biến của bạn sẽ được gán hay không, bởi vì nó đang được gán bên trong một câu lệnh if.

Xem: 5.3 Definite assignment

Tại một vị trí nhất định trong mã thực thi của một hàm thành viên, một biến được cho là chắc chắn giao nếu trình biên dịch có thể chứng minh, bằng cách phân tích dòng chảy tĩnh, rằng biến đã được tự động khởi tạo hoặc đã là mục tiêu của ít nhất một nhiệm vụ .

+0

Ồ, điều này có vẻ như bị hỏng, tại sao họ lại chọn lựa thiết kế này? – Harrichael

2

Bạn cần khởi tạo các biến đó;

phải giữ một số giá trị trước khi trả về từ phương thức Getpapers()

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