2012-04-28 31 views
7

Có cách nào để biết liệu tham số ngoài đã được đặt hay chưa. Đây là giả cho những gì tôi đang tìm kiếm:Làm cách nào để biết một tham số đã được đặt chưa?

public virtual string blabla(long num, out bool bval) 
    { 
     if (!bval.HasValue) 
      { 
      //Do some default logic 
      bval = defaultValue; 
      } 

     return blabla2(num, bval); 
    } 
+1

Nếu bạn mong đợi một cái gì đó để đi vào phương pháp, không chỉ để đi ra ngoài, sau đó sử dụng 'ref' thay vì 'ra'. –

+1

Có vẻ như bạn cần một loại nullable: 'ref bool? bval' –

Trả lời

12

bạn không thể - bạn không thể đọc biến cho đến khi nó được chắc chắn được giao trong phương pháp của bạn. Bạn nên nghĩ nó giống như một biến cục bộ, được khai báo nhưng không được gán bất kỳ giá trị nào khi bắt đầu phương thức - nhưng bạn phải gán giá trị cho trước khi bạn quay trở lại. (Không sao nếu không có một giá trị cho nó nếu một ngoại lệ được ném.)

Nếu bạn muốn tham số mang thông tin như nhập vào phương pháp cũng như truyền thông tin, bạn nên sử dụng ref thay vì out.

Xem my article on parameter passing để biết thêm thông tin.

+0

Tham số ngoài thích hợp hơn trong trường hợp của tôi. Nhưng tôi chỉ kiểm tra xem có cách nào để kiểm tra xem một giá trị đã được gán hay chưa. Dù sao cũng cảm ơn bạn. – Omtara

+0

@Omtara: Chính xác * ý của bạn là gì nếu "giá trị đã được gán"? Bạn có nghĩa là bên ngoài phương pháp, hoặc trong phương pháp của riêng bạn? Nếu bạn có nghĩa là trong phương pháp của riêng bạn, bạn có thể theo dõi nó với một biến địa phương 'bool' riêng biệt. Đó là lẻ không biết chỉ bằng cách bạn đang ở trong mã ở hầu hết các nơi mặc dù. –

+0

@Omtara - làm thế nào là một tham số ra phù hợp hơn khi trong nhận xét bạn đang nói rằng một phương pháp bên ngoài từ nơi mà phương pháp hiện tại được gọi là sử dụng các tham số tương tự? –

2

Ngoài Jon's câu trả lời tuyệt vời, nếu bạn muốn tham số để vẫn có out, nhưng cần phải xem nếu nó đã được gán một giá trị tại một số nơi bên trong phương pháp này, bạn có thể sử dụng một loại nullable địa phương như sau:

public virtual string blabla(long num, out bool bval) 
{ 
    bool? bvalLocal; 

    ... //I'm assuming there is some code here that may or 
     //may not assign bvalLocal? 

    // This whole if block may not be needed if the default 
    // value is the default for the type (i.e. false) as 
    // GetValueOrDefualt() will take care of that (see 
    // second to last line). 
    if (!bvalLocal.HasValue) 
    { 
     //Do some default logic 
     bvalLocal = defaultValue; 
    } 

    bval = bvalLocal.GetValueOrDefault(); 
    return blabla2(num, bval); 
} 
+0

Phương pháp cần kiểm tra tham số ngoài được gọi từ phương thức khác sử dụng cùng tham số. Vì vậy, bằng cách sử dụng một biến nullable địa phương sẽ không hoạt động. – Omtara

+0

@Omtara - nó có thể hữu ích nếu bạn đăng mã (hoặc mã giả) của các phương thức đó gọi –

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