2010-05-12 429 views
2

我有這需要兩個參數的函數:讓C#方法返回多個不同數據類型的值?

string[], double[] 

如何返回這兩個值?如何調用該功能?

+0

有可能在單聲道C#,不知道這是否會逐步應用到未來的微軟的C# – Hao 2010-05-12 07:06:53

+1

浩:請給一個指針或顯示一個例子。 – Gabe 2010-05-12 08:08:56

+0

好的,事實證明,有一個概念驗證,可以對元組進行拆包分配:http://tirania.org/blog/archive/2009/Dec-23.html – Gabe 2010-05-12 09:52:54

回答

11

嘿,你可以使用關鍵字 「走出去」:

column s1; 
column s2; 

public void method1(out value1, out value2) 
{ 
select col1, col2, from tb1 
value1 = col1; 
value2 = col2; 
} 
+0

這是其中之一理由出來了。 – Dykam 2010-05-15 09:59:21

-3

您可以返回對象的Hashtable。或者List ...或任何你想要的對象集合。

LE:

Hashtable process(string[] x, double[] y) 
{ 
    Hashtable output = new Hashtable(); 

    // do whatever you want with x and y 

    output["stringArray"] = x; 
    output["doubleArray"] = y; 
    return output; 
} 

// ... 

string[] stringArray = new string[] {}; 
double[] doubleArray = new double[] {}; 

// ... 

Hashtable outcome = process(stringArray, doubleArray); 
string[] data1 = (string[])outcome["stringArray"]; 
double[] data2 = (double[])outcome["doubleArray"]; 

// ... 
+0

您可以使用例子來說明問題嗎? ?????? – Subbu 2010-05-12 08:03:43

+0

返回不同類型時只有哈希表有用(由於沒有類型安全) – RvdK 2010-05-12 08:52:23

+0

如何在不同位置調用該函數? – Subbu 2010-05-12 09:57:18

10

創建的值屬性的對象要返回:

public class MyReturnType 
{ 
    public string[] MyStringArray { get; set; } 
    public double[] MyDoubleArray { get; set; } 
} 

你的方法,然後將返回這個新類型:

public MyReturnType Foo() 
{ 
    ... 
    return new MyReturnType { MyStringArray = strings; MyDoubleArray = doubles; }; 
} 
+0

恕我直言只應使用當返回值是相關的(很大的可能性,他們是因爲他們來自相同的功能) – RvdK 2010-05-12 13:34:59

0

你不能直接返回,但可以使用strct返回。你可以爲字符串創建結構體並且將其存儲在其中,然後你可以返回它。

+0

你會請示例清楚說明??????/ – Subbu 2010-05-12 07:35:30

2

可以使用out或ref參數。

herehere

+0

+1擊敗我吧! – Blindy 2010-05-12 07:06:12

7
  • 使用元組結構(新的.NET 4.0,但是你可以根據它只是讓一個在你自己的DLL - 它是多個泛型類型的簡單容器)。

  • 使用像邁克爾Shimmins答案說的專門的載體結構,但使它成爲一個結構,而不是一個類,除非它很大。

  • 如果這是一個純粹的內部函數(案例問題),則使用一個dicitonary或一個對象數組。

  • 使用輸出參數。

+0

請問你能用例子說明一下嗎? – Subbu 2010-05-12 08:04:33

+2

不好,很抱歉 - 一本關於C#或文檔基礎知識的書有所有例子。 – TomTom 2010-05-12 08:12:42