2012-09-19 9 views
5

Tengo problemas para llamar a un método que he realizado.Problema sin el parámetro

El método que yo estoy llamando a es como 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; 
} 

estoy titulándose el método con el presente código, pero me da un error del compilador

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

Un ref o fuera argumento debe ser una variable asignable

¿Alguien más ha tenido este problema o simplemente lo estoy haciendo? g algo malo?

+0

+1 hecho una buena pregunta – V4Vendetta

Respuesta

12

La variable debe ser del tipo especificado en la firma del método. No puedes lanzarlo en la llamada.

La expresión age as object no es un valor asignable porque es una expresión, no una ubicación de almacenamiento. Por ejemplo, no se puede utilizar en el lado izquierdo de una asignación:

age as object = 5; // error 

Si se quiere evitar la fundición, se podría tratar de usar un método genérico:

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; 
} 

Por supuesto, comprobar algún error debe insertarse en su caso)

+0

Esto es exactamente lo que estaba buscando: D tx hombre. – Bobo

0

probar este

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

int iage = (int)age; 
+2

No debe usar la notación húngara. Los mejores nombres serían 'object tmp' y' int age'. –

+0

@Justin Quería obtener el tipo real (int/string/bool/enz) sin tener que lanzar el tipo – Bobo

2

Prueba este

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; 
} 

ejemplo invocar

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