2015-02-06 20 views
6

Trong một excellent answer about starting a timer immediately, tôi có thể nhìn thấy đoạn mã sau:(_) => DoWork(); Cách dấu gạch dưới hợp lệ dưới dạng tham số ủy nhiệm ẩn danh?

timer.Elapsed += timer_Elapsed; 
    ThreadPool.QueueUserWorkItem((_) => DoWork()); 
... 

void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { 
    DoWork(); 
} 

void DoWork() { 
    // etc... 
} 

Tôi đã thử nó bản thân mình, và tôi tình cờ gặp trên đường dây này, nơi mà tôi nghĩ là có một lỗi đánh máy trong việc xây dựng đại biểu vô danh:

       What? 
            | 
            V 
    ThreadPool.QueueUserWorkItem((_) => DoWork()); 

Quy tắc ẩn nào làm dấu gạch dưới "_" được chấp nhận làm tên thông số trong đại biểu ẩn danh?

+5

Quy tắc tương tự làm cho một dấu gạch dưới đơn được chấp nhận làm tên thông số trong trường hợp chung? '_' là một định danh hợp lệ trong C#. –

+0

Tôi không biết điều đó và tôi rất ngạc nhiên ... Cảm ơn bạn đã chỉ ra điều này. – Larry

+0

Tôi muốn đánh dấu là bản sao của [this] (http://stackoverflow.com/questions/950616/what-characters-class-allowed-in-c-sharp-class-name) nhưng tôi không muốn Mjolnir nó, vậy đây là lá phiếu của tôi. – Rawling

Trả lời

10

Dấu gạch dưới là ký tự nhận dạng thông thường trong C#. Ví dụ: my_money hợp lệ. Vì vậy, _ chỉ có giá trị là x.

Bạn cũng có thể viết _ => DoWork() mà tôi nghĩ là phổ biến hơn.

+6

Cũng đáng chú ý rằng khái niệm dấu gạch dưới biểu thị rằng tham số mà nó đại diện cho nó không được sử dụng trong hàm bên trong, nhưng nó cần được cung cấp để thỏa mãn trình biên dịch. Về cơ bản một cách viết tắt của câu nói "không nhớ tôi". –

+0

TIL '_' là tên biến hợp lệ – Shekhar

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