2

私のソリューションには、web-serviceプロジェクトとプロジェクトの 2 つのプロジェクトがありwin-formsます。Web サービスの戻りデータを win-forms データにキャストしたい。両方のプロジェクトでクラスTerminalを定義しています。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 enclosing typeというエラーが発生します。これはListキャストで発生します。しかし、ターミナルキャストではすべて問題ありません

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 に答える