簡體   English   中英

如何從C#中的方法獲取多個值作為返回類型?

[英]How to get multiple value as return type from a method in C#?

假設在C#類中有一個類似_Abc(int a, int b)通常需要2個參數。

是否有可能從_Abc(int a, int b)方法中獲取4個int值作為返回值?

你可以返回一個Tuple<int, int, int, int> 返回元組作為公共API的一部分並不是非常有用,所以在這種情況下我會創建一個類來保存返回值,以便您可以命名值。

雖然到目前為止的答案(返回元組,返回集合,返回自定義類/結構,或使用參數)是合理的答案,更好的答案是: 首先不要這樣做 返回四件事的方法可能是設計糟糕的方法。

您是否可以重新設計類型,例如,您有四種不同的方法(或屬性),每種方法都返回一個東西? 您可能有更好的模式供您使用。 你能更詳細地解釋你的情景嗎?

您可以返回自定義類型,這是最靈活和可擴展的方法。

public static Foo GetFoo(int a, int b)
{
    Foo foo = new Foo();
    foo.A = 1;
    foo.B = 2;
    foo.C = 3;
    foo.D = 4;
    return foo;
}

這是偽類

public class Foo
{
    public int A{ get; set; }
    public int B{ get; set; }
    public int C{ get; set; }
    public int D{ get; set; }
}

另一種方式(使用.NET 4)使用Tuple

public static Tuple<int,int,int,int> GetFoo(int a, int b)
{
    return Tuple.Create(1,2,3,4);
}

由於您以這種方式讀取屬性,因此不像類方法那么可讀:

var values = GetFoo(1, 2);
int A = values.Item1;
int B = values.Item2;
int C = values.Item3;
int D = values.Item4;

所以一個元組有點匿名。

如果您只想返回一個或兩個附加參數,也可以使用TryParse參數中的out參數。

DateTime dt;
String str = "01.01.2013";
if(DateTime.TryParse(str, out dt))
{
    // so this method returns two variables:
    // a bool as return value and a DateTime as out parameter
    Console.WriteLine("Year: " + dt.Year);
}

除了Lee的回答,你可以添加一些refout參數,即:

_Abc(int a, int b, out int c, out int d, out int e, out int f)

您還可以使用out參數創建這樣的函數。

public void _Abc(int a, int b, out res1, out res2, out res3, out res4)
   {
    res1 = 1;
    res2 = 2;
    res3 = 3;
    res4 = 4;
   }

如果您可以更改方法,則可以使用參數。 http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspx

_Abc(int a, int b, out int c, out int d, out int e, out int f){
c=1;
d=2;
e=3;
f=4;
}

您可以將它們作為輸出參數返回

如果你要返回4個完全不同的東西,那么最好創建一個新類型。 例如,如果要返回新創建的形狀的高度,寬度,頂部和底部值,則應創建一個包含所有這些值的類,並使用正確的變量名稱。

如果你持有4種相同類型的東西,那么將它們全部放入某種類型的集合中可能是有意義的。 例如,如果四個數字代表四種不同形狀的區域,則返回List<int>int[]有意義的。

我覺得你需要簡單的答案,對嗎?

嘗試理解這個簡單的代碼(只需復制和粘貼):

class Class1
{
    private List<int> _Abc(int a, int b)
    {
        // do job

        int x = 128, y = 256, z = 512;
        List<int> returns = new List<int>();
        returns.Add(x);
        returns.Add(y);
        returns.Add(z);

        return returns;
    }

    public void anotherMethod()
    {
        List<int> simple = new List<int>();
        simple = _Abc(55, 56);

        int[] _simple = simple.ToArray();
        for (int i = 0; i < simple.Count; i++)
        {
            Console.WriteLine("" + _simple[i]);
        }
        //Console.ReadKey();
    }
}

暫無
暫無

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

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