如何从C#中的方法返回多个值

我有以下方法:

public static ?? GetType6() { var name = "x"; var age = 1; return ?? } 

这样称呼:

  var ?? = GetType6(); 

我希望能够调用该方法并取回名称和年龄。 我想创建一个匿名对象,但如果我这样做,我怎么能解码它?

最简单的方法是返回一个Tuple (从.NET 4开始可用):

 public static Tuple GetType6() { var name = "x"; var age = 1; return Tuple.Create(name, age); } 

您可以通过以下方式读取值:

 var pair = GetType6(); string name = pair.Item1; int age = pair.Item2; 

当然,更健壮,可读和可维护的是创建一个类:

 class User { public string Name { get; set; } public int Age{ get; set; } } public static User GetUser() { var name = "x"; var age = 1; return new User{Name = name, Age = age }; } var user = GetUser(); string name = user.Name; int age = user.Age; 

你为什么不创建一个类型来容纳你想要的东西?

 public static MyType GetType6() { MyType type = new MyType(); type.name = "x"; type.age = 1; return type; } class MyType { public string name {get;set;} public int age {get;set;} public MyType() { } } 

你可以使用元组:

 public Tuple GetMultipleValue() { return new Tuple(1,2); } 

您可以在此处获得更多详细信息: http : //msdn.microsoft.com/en-us/library/system.tuple.aspx

使用out关键字,可以如下:

 public static string GetType6(out int age) { var name = "x"; var age = 1; return name } 
  • out关键字使参数通过引用传递。
  • 这类似于ref关键字,除了ref要求在传递之前初始化变量。
  • 要使用out参数,方法定义和调用方法都必须显式使用out关键字。

注意:使用它是不好的做法。

使用dynamic作为返回类型:

 public static dynamic GetType6() { var name = "x"; var age = 1; return new { name = "x", age = 1 }; } 

方法调用:

 var v = GetType6(); 

问题: C#中方法的变量返回类型
MSDN: http : //msdn.microsoft.com/en-us/library/vstudio/dd264741.aspx

你可以使用匿名类型。 像这样。

 public static object GetType6() { return new { name = "x", age = 1 }; } 

要读取值,必须使用reflection。

 var foo = GetType6(); var name = foo.GetType().GetProperty("name").GetValue(foo, null); var age = foo.GetType().GetProperty("age").GetValue(foo, null); 

虽然这是一种非常肮脏的方式来完成你所需要的东西。