2012-09-19 12 views
5

Ho problemi con la chiamata a un metodo che ho creato.Problema con parametro fuori

Il metodo che chiamo per come è folows

public bool GetValue(string column, out object result) 
{ 
    result = null; 
    // values is a Dictionary<string, object> 
    if (this._values.ContainsKey(column)) 
    { 
     result = Convert.ChangeType(this._values[column], result.GetType()); 
     return true; 
    } 
    return false; 
} 

sto caling il metodo con il codice di questo, ma ho un errore del compilatore

int age; 
a.GetValue("age", out age as object) 

Un ref o fuori argomento deve essere una variabile assegnabile

Qualcun altro ha avuto questo problema o sto solo facendo qualcosa che non va?

+0

+1 davvero una buona domanda – V4Vendetta

risposta

12

La variabile deve essere esately del tipo specificato nella firma del metodo. Non puoi lanciarlo nella chiamata.

L'espressione age as object non è un valore assegnabile perché è un'espressione, non un percorso di archiviazione. Ad esempio, non è possibile utilizzarlo sulla mano sinistra di una cessione:

age as object = 5; // error 

Se si vuole evitare la fusione, si potrebbe provare a utilizzare un metodo generico:

public bool GetValue<T>(string column, out T result) 
{ 
    result = default(T); 
    // values is a Dictionary<string, object> 
    if (this._values.ContainsKey(column)) 
    { 
     result = (T)Convert.ChangeType(this._values[column], typeof(T)); 
     return true; 
    } 
    return false; 
} 

Naturalmente, controllando alcuni errori deve essere inserito, se del caso)

+0

Questo è esattamente quello che stavo cercando: D tx uomo. – Bobo

0

Prova questa

object age; 
a.GetValue("age", out age); 

int iage = (int)age; 
+2

Non si dovrebbe usare la notazione ungherese. I nomi migliori sarebbero 'object tmp' e' int age'. –

+0

@Justin Volevo ottenere il tipo reale (int/string/bool/enz) senza dover eseguire il cast del tipo – Bobo

2

Prova questo

public bool GetValue<T>(string column, out T result) 
{ 
    result = default(T); 
    // values is a Dictionary<string, object> 
    if (this._values.ContainsKey(column)) 
    { 
     result = (T)Convert.ChangeType(this._values[column], typeof(T)); 
     return true; 
    } 
    return false; 
} 

esempio invocare

int age; 
a.GetValue<int>("age", out age);