2010-12-03 5 views
2

Wie kann ich mehr als einen Typ in C# -Funktion wie ich String und Datentabelle zurückgeben möchten?zurückgeben mehr als eine Ausgabe auf C#

+2

Duplizieren: http://stackoverflow.com/questions/3130372/c-function-returning-two-values ​​ –

Antwort

2

Sie können Ihre eigene Klasse zu verwenden als Rückgabetyp definieren:

class MyReturnType 
{ 
    public string String { get; set; } 

    public DataTable Table { get; set; } 
} 

und geben eine Instanz davon. Sie könnten ein Tupel verwenden, aber es ist oft besser, aussagekräftige Typ- und Eigenschaftsnamen zu haben, besonders wenn jemand anderes an der Software arbeitet.

Oder Sie könnten einen out Parameter für die Funktion verwenden.

Der Weg hängt davon ab, was für Ihre Situation geeignet ist. Wenn die Zeichenfolge und die DataTable zwei Teile derselben Sache sind, macht eine Klasse Sinn. Wenn die Zeichenfolge für eine Fehlernachricht beim Erstellen der DataTable verwendet wird, ist ein out-Parameter möglicherweise besser geeignet.

3

Die einfachste Antwort ist die Verwendung der Eigenschaft TableName der DataTable.

Die allgemeinere Antwort ist, eine Tuple<DataTable, string> zu verwenden oder eine Klasse oder eine Struktur zu schreiben.

+0

ist dies nur in .Net 4? weil ich es versuche, aber VS2008 wusste nicht, was Tuple ist: S – kartal

+0

@salamo: Die 'Tuple' Klasse ist neu in .Net 4.0. Die 'TableName' -Eigenschaft ist nicht. – SLaks

1

Verwenden Sie ein Tupel als Rückgabe.

2

einen out-Parameter verwenden:

public string Function(out DataTable result) 

es so Aufruf:

DataTable table; 
string result = Function(out table); 
3

Verwendung ref oder Parameter aus

ref Parameter: erfordert initilization vom Anrufer Methode.

public string ReturnName(ref int position) 
{ 
    position = 1; 
    return "Temp" 
} 


public string GetName() 
{ 
    int i =0; 
    string name = ReturnName(ref i); 
    // you will get name as Temp and i =1 

} 


// best use out parameter is the TryGetXXX patternn in various places like (int.TryParse,DateTime.TryParse) 
int i ; 
bool isValid = int.TryParse("123s",out i); 
Verwandte Themen