【问题标题】:passing a object[] to a params object[] not working将对象 [] 传递给参数对象 [] 不起作用
【发布时间】:2009-08-28 16:35:22
【问题描述】:

我已阅读有关将 object[] 传递给 params object[] 的主题,但我不知道为什么它不适用于我。

我在一个类中也有这些功能:

...
    private void CallbackEvent(object source, CallbackEvetArgs e) { // Some event with e.Data as string
    ...
        string[] values = e.Data.Split('|');
        DoSave("save", values.Skip(1).Cast<object>().ToArray());
    ...
    }
...
    public void DoSave(string action, params object[] values) {
    ...
        string value1 = values[0];
    ...
    }
...

但是 value1 不是在 value1 中接收字符串,而是接收整个数组 (string[]),因此是一个无效的强制转换异常。

我做错了什么?

【问题讨论】:

    标签: c# object casting params


    【解决方案1】:

    C#(一般为 .NET)数组是协变的。您可以简单地将string[] 传递给object[] 参数。

    DoSave("save", values.Skip(1).ToArray());
    

    您发布的代码绝对不是您测试的确切代码。 Cast&lt;object&gt; 也应该可以正常工作。此行不应该编译:

    string value1 = values[0]; // object -> string, no implicit conversion.
    

    请发布导致问题的确切代码。

    【讨论】:

    • 这是真的,但问题仍然是,如果您将 .Cast&lt;object&gt;() 插入链中,为什么会中断?
    • AnthonyWJones:它不应该坏掉。我认为 OP 在这方面是错误的。
    • 感谢您的回答 Mehrdad,但它也不起作用。我已经尝试过您的建议,值 [0] 仍然得到一个字符串 [],因此我得到一个异常说:“无法将字符串 [] 转换为字符串。”。当我在函数调用中查看值参数时,它显示:值 -> {+object[1]} -> {+string[1]} ->“真实值”。我试过: DoSave("save", values.Skip(1).ToArray()); DoSave("保存", (object)values.Skip(1).ToArray()); DoSave("保存", values.Skip(1).Cast().ToArray()); DoSave("保存", (object)values.Skip(1).Cast().ToArray());结果相同。
    • 啊,我试过 DoSave("save", values[1], values[2]);这很完美......但它完全错过了预期实施的重点。我真的不知道发生了什么事。
    • 您能否编辑您的问题并发布DoSave 方法的确切代码?
    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多