2014-05-09 3 views
5
protected string Active_Frozen(string text, string color) 
{ 
    connection(); 
    string query = "SELECT CustomerInfo FROM ActiveSubscription WHERE [email protected]"; 

    SqlCommand cmd = new SqlCommand(query, conn); 

    if(query=="true") 
    { 
     text = "Active"; 
     color = "Green"; 
    } 
    else 
    { 
     text = "Frozen"; 
     color= "Red"; 
    } 

    return (text, color); 
} 

Voglio restituire entrambe le stringhe: testo e colore, non sono sicuro di quale sia il problema.Ritorno di due stringhe in una funzione in C#

Errore dichiarazione @ ritorno:

(parametro)? testo/colore

Impossibile convertire espressione lambda al tipo 'stringa' perché non è un tipo delegato

+0

incapsulare le proprietà 'Text' e' Color' in una classe e restituire un'istanza della classe. La sintassi che descrivi non è disponibile in C#. –

+1

Puoi restituire un 'Tuple ' o (preferibilmente) semplicemente rollare una semplice classe che contiene le due stringhe come proprietà e restituirla. EDIT: o usare i parametri 'out' o' ref', ma potrebbe essere un po 'doloroso da usare. –

risposta

7

Quando si restituisce due le cose, è necessario dichiarare la funzione di ritorno due cose. Tuttavia, la tua funzione è dichiarata come restituita una stringa.

Un modo per risolvere il problema sta usando Tuple<T1,T2>:

Tuple<string,string> Active_Frozen(string text, string color) { 
    ... 
    return Tuple.Create(text, color); 
} 

Nota che il ritorno al nome del colore, piuttosto che un oggetto di colore in sé, non può essere l'ideale, a seconda dell'uso dei valori restituiti in il tuo design. Se desideri restituire una rappresentazione dell'oggetto del colore anziché una stringa, modifica il secondo argomento di tipo dello Tuple oppure crea la tua classe che rappresenta il testo e il suo colore.

+0

"devi dichiarare la tua funzione come dichiarazione di due cose" mah bwains hutz dood D: – Kilazur

1

È possibile utilizzare out parametri:

protected string Active_Frozen(out string text, out string color) 
{ 
    connection(); 

    string query = "SELECT CustomerInfo FROM ActiveSubscription WHERE [email protected]"; 

    SqlCommand cmd = new SqlCommand(query, conn); 


    if(query=="true") 
    { 
     text = "Active"; 
     color = "Green"; 
    } 

    else 
    { 
     text = "Frozen"; 
     color= "Red"; 
    } 
} 

chiamare in questo modo:

string text; 
string color; 

Active_Frozen(out text, out color); 
2

Crea un oggetto classe e restituisci classe dal metodo:

public class Container 
{ 
public string text {get;set;} 
public string color{get;set;} 
} 

Metodo:

protected Container Active_Frozen(string text, string color) 
    { 

    connection(); 

    string query = "SELECT CustomerInfo FROM ActiveSubscription WHERE [email protected]"; 

    SqlCommand cmd = new SqlCommand(query, conn); 


    if(query=="true") 
    { 
     Container c = new Container{text = "Frozen",color= "Red"}; 
    } 

    else 
    { 
     Container c = new Container{text = "Frozen",color= "Red"}; 
    } 

    return c; 
} 
0

Devi restituire un array, una tupla o anche una lista (chissà, potresti dover restituire più oggetti un giorno).

È possibile portare il calore in alto e restituire un Hashtable o utilizzare i parametri.

protected Hashtable Active_Frozen(string text, string color) 
{ 
    // code code 
    Hashtable values = new Hashtable(); 

    if(query=="true") 
    { 
     values.Add("text", "Active"); 
     values.Add("color", "Green"; 
    } 
    else 
    { 
     // etc 
    } 

    return values; 
} 

protected void Active_Frozen(out string text, out string color) 
{ 
    // this way, whenever you modify text or color, you will modify the actual instances you passed to Active_Frozen instead of copies 
    // and code code 
} 
0

Penso che si possa utilizzare una lista di stringhe e si può restituire tutti i valori che si desidera

protected list<string> Active_Frozen(string text, string color) 
{ 
    connection(); 
    string query = "SELECT CustomerInfo FROM ActiveSubscription WHERE [email protected]"; 

    SqlCommand cmd = new SqlCommand(query, conn); 

    if(query=="true") 
    { 
     text = "Active"; 
     color = "Green"; 
    } 
    else 
    { 
     text = "Frozen"; 
     color= "Red"; 
    } 
    list<string> liststring = new list<string> { text, color}; 
    return liststring; 

}

spero di aiutarvi.

0

Ci sono diversi modi per raggiungere questo obiettivo

1.Array

protected string[] Active_Frozen(string text, string color) 
{ 
string [] returnVal=new string[2]; 
returnVal[0] = text; 
returnVal[1] = color; 
return returnVal; 
} 

2.Struct (simile classe di oggetti)

struct myReturnValues 
{ 
    public string text; 
    public string color; 
} 

protected myReturnValues Active_Frozen(string text, string color) 
{ 
    myReturnValues returnVal = new myReturnValues(); 
    returnVal.text = text; 
    returnVal.color = color; 
    return returnVal; 
} 

3. Out Parametri

protected myReturnValues Active_Frozen(out string text, out string color) 
    { 
text="new valuess"; 
color= "new color"; 
    }