簡體   English   中英

如何從C#中的方法返回多個值

[英]How can I return more than one value from a method in C#

我有以下方法:

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

這樣稱呼:

    var ?? = GetType6();

我希望能夠調用該方法並獲取名稱和年齡。 我曾想創建一個匿名對象,但是如果這樣做,我該如何解碼呢?

您為什么不創建一個類型來容納想要的內容呢?

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()
   {
   }
}

最簡單的方法是返回Tuple<string, int> (從.NET 4開始可用):

public static Tuple<string, int> 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 Tuple<int, int> GetMultipleValue()
{
    return new Tuple<int,int>(1,2);
}

您可以在此處獲得更多詳細信息: http : //msdn.microsoft.com/zh-cn/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();

SO問題: C#中方法的變量返回類型
MSDN: http : //msdn.microsoft.com/en-us/library/vstudio/dd264741.aspx

您可以按照您所說的使用匿名類型。 像這樣。

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

要讀取值,您必須使用反射。

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

盡管這是完成所需內容的一種非常骯臟的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM