2

我的解决方案中有 2 个项目,一个web-service项目和一个win-forms项目。我想将 web 服务的返回数据转换为 win-forms 数据。我在两个项目中都定义了类终端。在 win 应用程序中,我编写了这个演员表:

static public implicit operator List<Terminal>(EService.Terminal[] svcTerminals)
{
    List<Terminal> terminals = new List<Terminal>();
    foreach (var svcTerminal in svcTerminals)
    {
        Terminal terminal = new Terminal();
        terminal.TerminalID = svcTerminal.TerminalID;
        terminal.TerminalTypeID = svcTerminal.TerminalTypeID;
        terminal.TerminalGUID = svcTerminal.TerminalGUID;
        terminal.Description = svcTerminal.Description;
        terminal.Name = svcTerminal.Name;
        terminal.PortID = svcTerminal.PortID;
        terminals.Add(terminal);
    }

    return terminals;
}

但它不起作用并给出错误user-defined conversion must convert to or from enclosure type,这发生在List cast 中。但是在终端演员中一切都很好

static public implicit operator Terminal(EService.Terminal svcTerminal)
{
    Terminal terminal = new Terminal();
    terminal.TerminalID = svcTerminal.TerminalID;
    terminal.TerminalTypeID = svcTerminal.TerminalTypeID;
    terminal.TerminalGUID = svcTerminal.TerminalGUID;
    terminal.Description = svcTerminal.Description;
    terminal.Name = svcTerminal.Name;
    terminal.PortID = svcTerminal.PortID;
    return terminal;
}

谁能帮我解决这个问题,以便我可以

return (List<Terminal>)eService.CheckTerminal(guid, ref cityName, ref portName);

代替

List<Terminal> terminals = new List<Terminal>();
var svcTerminals = eService.CheckTerminal(guid, ref cityName, ref portName);
foreach (var svcTerminal in svcTerminals)
{
    Terminal terminal = new Terminal();
    terminal.TerminalID = svcTerminal.TerminalID;
    terminal.TerminalTypeID = svcTerminal.TerminalTypeID;
    terminal.TerminalGUID = svcTerminal.TerminalGUID;
    terminal.Description = svcTerminal.Description;
    terminal.Name = svcTerminal.Name;
    terminal.PortID = svcTerminal.PortID;
    terminals.Add((Terminal)svcTerminal);
}
return terminals;
4

2 回答 2

4

你可以做:

eService.CheckTerminal(guid, ref cityName, ref portName).Select(x => (Terminal) x);
于 2013-02-06T11:18:16.717 回答
0

MSDN 说

要转换的参数的类型或转换结果的类型,但不能同时是两者,必须是包含类型。

因此,为了让他工作,您需要将您的转换运算符声明移动到您要转换到(或从)的类中,即List<Terminal>or EService.Terminal[]。由于您无法将方法添加到标准类中,因此我建议您使用此方法而不是运算符,或者使用 LINQ。

于 2013-02-06T11:20:29.537 回答