5

我在调用我所做的方法时遇到问题。

我调用的方法如下

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

我正在使用此代码调用该方法,但出现编译器错误

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

ref 或 out 参数必须是可赋值变量

其他人有这个问题还是我做错了什么?

4

3 回答 3

12

该变量必须完全属于方法签名中指定的类型。您不能在通话中使用它。

该表达式age as object不是一个可赋值的值,因为它是一个表达式,而不是一个存储位置。例如,您不能在作业的左侧使用它:

age as object = 5; // error

如果要避免强制转换,可以尝试使用通用方法:

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

当然,应该在适当的地方插入一些错误检查)

于 2012-09-19T09:19:59.273 回答
2

试试这个

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

示例调用

int age;
a.GetValue<int>("age", out age);
于 2012-09-19T09:58:33.250 回答
0

试试这个

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

int iage = (int)age;
于 2012-09-19T09:21:24.227 回答