2011-01-19 32 views
27

Giả sử tôi có hàm có thông số out, tuy nhiên tôi không cần giá trị của nó. Có cách nào để vượt qua không có tham số thực tế nếu kết quả nhất định sẽ được vứt bỏ không?Có cách nào để bỏ qua tham số không?

EDIT:

Mặc dù câu hỏi đã được bình chọn là dupe của Optional Output Parameters nó chỉ là nếu bạn nhìn từ góc độ người sáng tạo ra phương pháp của. Nếu bạn là người dùng của phương thức, bạn không quan tâm đến việc tạo tham số tùy chọn, chỉ cần không sử dụng nó mà không khai báo biến. Và trong khi điều này là không thể, với C# 7.0 nó có thể khai báo nó trong cuộc gọi phương thức. Vì vậy, thay vì:

int unusedValue; 
TryGetValue("key", out unusedValue); 

bạn nhận được:

TryGetValue("key", out int unusedValue); 

hoặc thậm chí:

TryGetValue("key", out _); 

này nên được thêm vào như là một câu trả lời, nhưng:

  • Tôi có thể' t làm điều này cho câu hỏi này, bởi vì nó đã được đánh dấu là một bản dupe;
  • câu hỏi mà câu hỏi này dường như là sự lừa đảo thực sự yêu cầu một điều khác.
+5

không không không không không không – Andrey

Trả lời

22

Bạn không thể làm điều này, nhưng không có quy tắc nào nói rằng bạn phải sử dụng giá trị quay lại. Bạn có thể chỉ cần chuyển một biến tạm thời mà bạn không bao giờ sử dụng lại.

C# 4.0 cho phép tham số tùy chọn, nhưng không thể tùy chọn thông số out.

EDIT: BTW, bạn cũng có thể quá tải phương pháp:

int DoStuff() 
{ 
    int temp; 
    return DoStuff(out temp); 
} 

int DoStuff(out outParam) 
{ 
    //... 
} 
+0

Vâng, tôi biết tôi không phải sử dụng nó. Tôi cũng muốn không vượt qua bất kỳ biến nào. Tuy nhiên đây là câu trả lời, cảm ơn bạn. –

7

Trong khi bạn không thể thực sự làm cho các tham số ra tùy chọn, bạn chỉ đơn giản là có thể tạo ra một tình trạng quá tải cho các chức năng mà không có tham số ra, mà sau đó sẽ lấy đi sự cần thiết phải tạo ra một biến tạm thời.

public void DoSomething(int param1, out int param2) 
{ 
    /* Method work here */ 
} 

public void DoSomething(int param1) 
{ 
    int temp; 
    DoSomething(param1, out temp); 
} 
+0

Câu trả lời này có chức năng hơn. Không cần phải sửa đổi sau này nếu bạn muốn sử dụng nó hoặc không sử dụng nó nữa. – elcool

+0

Và nếu bạn không sở hữu phương thức bạn đang gọi, bạn có thể tạo một phương thức mở rộng để giả lập các tham số ngoài cho bạn. –

0

Không chắc chắn về C#, nhưng trong VB.Net bạn có thể chỉ cần nhập tham số vào hằng số (byref). Vì vậy, nếu bạn có một số nguyên, như là một tham số đầu ra, bạn không phải vượt qua trong một biến thực tế, bạn có thể chỉ cần vượt qua trong 0, hoặc bất kỳ số nguyên hợp lệ khác. Đối với các đối tượng, bao gồm cả chuỗi bạn chỉ có thể vượt qua trong không có gì (Null trong C#) và tất cả mọi thứ hoạt động tốt. Tôi không chắc chắn nơi mà các biến được lưu trữ, có lẽ chỉ cần trên stack như trong bất kỳ tham số khác bạn vượt qua, và nó biến mất khi chức năng thoát.

+0

Tôi đã thử, tiếc là nó không hoạt động. 'lỗi CS1510: Đối số ref hoặc out phải là biến có thể gán'. – MasterMastic

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