2010-05-27 33 views
6

HiiPhương thức phải trả lại nhiều giá trị

Tôi có phương thức trong C#, tôi phải trả lại nhiều giá trị từ phương thức đó bằng cách sử dụng các bộ sưu tập như mảng. Có cách nào đáng tin cậy không?

+0

bạn có thể vui lòng mở rộng "nhiều giá trị"? Có phải số hằng số giá trị trả lại của bạn không? Chúng có được liên kết hợp lý không? Họ đại diện cho cái gì? Họ có cùng loại không? – Kobi

+0

Có thể trùng lặp của [Làm thế nào tôi có thể trả về nhiều giá trị từ một hàm trong C#?] (Http://stackoverflow.com/questions/748062/how-can-i-return-multiple-values-from-a-function-in -c) –

Trả lời

10

Vâng, bạn có thể sử dụng:

  • một lớp tùy chỉnh/struct/loại, chứa tất cả các giá trị của bạn
  • out thông số

Ie:

class MyValues 
{ 
    public string Val1 { get; set; } 
    public int Val2 {get; set; } 
} 

public MyValues ReturnMyValues(); 

hoặc

public void ReturnMyValues(out string Val1, out int Val2); 
2

Có thể tạo ra một loại mới sẽ chứa nhiều thuộc tính và sau đó trở về loại hình này:

public MyType MyMethod() 
{ 
    return new MyType 
    { 
     Prop1 = "foo", 
     Prop2 = "bar" 
    }; 
} 
15

Vâng, out keyword:

public void ReturnManyInts(out int int1, out int int2, out int int3) 
{ 
    int1 = 10; 
    int2 = 20; 
    int3 = 30; 
} 

sau đó gọi nó như thế này:

kết quả đầu ra:

10 
20 
30 

EDIT:

tôi nhìn thấy rằng rất nhiều bài viết đang đề xuất để tạo ra lớp của riêng bạn cho việc này. Điều này không cần thiết vì .net cung cấp cho bạn một lớp để làm những gì họ đang nói. Lớp Tuple.

public Tuple<int, string, char> ReturnMany() 
{ 
    return new Tuple<int, string, char>(1, "some string", 'B'); 
} 

sau đó bạn có thể lấy nó như vậy:

var myTuple = ReturnMany(); 
myTuple.Item1 ... 
myTuple.Item2 ... 

có quá tải chung, do đó bạn có thể có đến 8 loại duy nhất trong tuple của bạn.

+3

Ngoài ra, phương thức 'Tuple.Create' có thể suy ra các kiểu:' return Tuple.Create (1, "một số chuỗi", 'B'); ' –

+3

Lưu ý rằng Tuple là một tính năng mới của .NET 4.0, mà Jibu có thể không (chưa) có. –

0

Lớp mô tả hoặc cấu trúc. Bạn phải đặt nó ở đâu đó vì logic là một phương thức chỉ trả về một giá trị. Hoặc bạn có thể sử dụng ra hoặc ref, nhưng tôi sẽ đi trở lại một lớp học.

Btw điều gì khiến bạn không sử dụng bộ sưu tập ?.

2

Tại sao nên sử dụng 'out' là một cách không đáng tin cậy? (Hay bạn thực hiện một lỗi đánh máy và có nghĩa là không có?)

Có nhiều phương pháp:

  • Return một đối tượng nắm giữ nhiều giá trị (struct/lớp vv)
  • out
  • ref
5

Nếu bạn đang sử dụng .NET 4.0 bạn có thể sử dụng một trong các lớp generic Tuple để trả về nhiều giá trị từ một cuộc gọi phương thức. Lớp tĩnh Tuple cung cấp các phương thức để tạo các đối tượng Tuple. Vì vậy, bạn không phải xác định kiểu trả về của riêng bạn cho phương thức.

public Tuple<string,int> Execute() 
{ 
    return new Tuple<string,int>("Hello World", 2); 
} 
+0

Chỉ là một điểm nhỏ: tất cả 8 loại Tuple là chung trong C# 4.0. – Kobi

0
public int Method Name(out string stringValue, out int intValue) 
{ 
    /// 
      Method goes here 
    /// 

    return intVaraible 
} 

ở đây bạn sẽ nhận được 3 giá trị trả lại 1. stringValue 2. intValue 3. intVariable

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