2013-08-12 40 views
7

Trong C# Net, System.Diagnostics.Debug.WriteLine có một số quá tải, trong đó có hai:quá tải Debug.WriteLine dường như mâu thuẫn

//http://msdn.microsoft.com/en-us/library/cc190153.aspx 
public static void WriteLine(string format, params Object[] args); 

//http://msdn.microsoft.com/en-us/library/1w33ay0x.aspx 
public static void WriteLine(string message, string category); 

ý định của tôi là để gọi đầu tiên với:

Debug.WriteLine("The path is {0}", myObj.myPath); 

Nhưng nó xuất hiện rằng tôi đang thực sự gọi quá tải thứ hai, bởi vì nó là một trận đấu chính xác hơn.

Có một cách đơn giản để cho biết rằng tôi muốn là người đầu tiên?

nỗ lực tốt nhất của tôi cho đến nay là:

Debug.WriteLine("The path is {0}", new object[]{myObj.myPath}); 
Debug.WriteLine("The path is {0}", myObj.myPath, ""); 

Nhưng không ai trong số những cái nhìn rất thanh lịch.

+4

Đây là một ví dụ vàng của lý do tại sao quá tải nên luôn luôn có ngữ nghĩa giống hệt nhau. Nếu hai phương thức có hành vi khác nhau, chúng phải có tên khác nhau. quá tải cũng tốt để mô phỏng các thông số mặc định hoặc variadic, hoặc nếu có được tối ưu hóa các trường hợp đặc biệt. Tuy nhiên, chúng phải luôn giống nhau trong hành vi. –

Trả lời

6

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

Debug.WriteLine("The path is {0}", (object)myObj.myPath); 
0

ý định của tôi là để gọi đầu tiên với:

Người đầu tiên là không nhận được gọi là bởi vì trong trường hợp của chuỗi quá tải rõ ràng được ưu tiên. Đây là những gì MSDN phải nói về nó.

Từ khóa paramskey trong phương thức này ngụ ý rằng mảng đối tượng có thể là một giá trị duy nhất. Ngoại lệ cho đây là đối tượng Chuỗi. quá tải rõ ràng chiếm ưu thế, vì vậy giá trị arg của một chuỗi đơn sẽ mặc định Debug.WriteLine (String, String) quá tải.

để sắp xếp, hãy gọi thứ tự đầu tiên bạn phải chuyển đổi nó thành đối tượng để quá tải rõ ràng không được ưu tiên.

Debug.WriteLine("The path is {0}", (object)myObj.myPath); 
+0

@abelenky đã cập nhật câu trả lời của tôi. – Ehsan

4

Điều này hơi khó chịu. Vâng, có một cách tốt hơn. Tôi sử dụng Debug.Print (docs) có cùng tác dụng nhưng ít bị quá tải. Nó dễ dàng hơn so với cố gắng để xem khi bạn có thể được đi qua hai dây để WriteLine và đúc để object và ít gõ quá. Ví dụ:

Debug.Print("The path is {0}", myObj.myPath); 
1

Bạn có thể tránh sử dụng quá tải, và chỉ cần vượt qua chuỗi định dạng:

Debug.WriteLine(string.Format("The path is {0}", myObj.myPath)); 
1

Đối với người đánh máy lười biếng, giống như bản thân mình, tôi chỉ sử dụng

System.Diagnostics.Debug.Writeline("Hello {0}", "World", 1); 

Các tham số phụ buộc quá tải chính xác và hoàn toàn lành tính.

+0

Bạn là một 'kẻ lừa đảo lười biếng' nhưng bạn là người duy nhất viết không gian tên đầy đủ? số 8) –

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