Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用户定义的转换错误_C#_.net_Casting - Fatal编程技术网

C# 用户定义的转换错误

C# 用户定义的转换错误,c#,.net,casting,C#,.net,Casting,我的解决方案中有两个项目,一个是webservice项目,另一个是winforms项目。我想转换web服务的返回数据以赢得表单数据。我在两个项目中都定义了类终端。在win应用程序中,我编写了以下演员阵容: static public implicit operator List<Terminal>(EService.Terminal[] svcTerminals) { List<Terminal> terminals = new List<Terminal&

我的解决方案中有两个项目,一个是
webservice
项目,另一个是
winforms
项目。我想转换web服务的返回数据以赢得表单数据。我在两个项目中都定义了类终端。在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;
}
有人能帮我修一下吗

return (List<Terminal>)eService.CheckTerminal(guid, ref cityName, ref portName);
return(List)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;
列表终端=新列表();
var svcTerminals=eService.checkTerminals(guid,ref cityName,ref portName);
foreach(svcTerminals中的svcTerminals变量)
{
端子=新端子();
terminal.TerminalID=svcTerminal.TerminalID;
terminal.TerminalTypeID=svcTerminal.TerminalTypeID;
terminal.TerminalGUID=svcTerminal.TerminalGUID;
terminal.Description=svcTerminal.Description;
terminal.Name=svcTerminal.Name;
terminal.PortID=svcTerminal.PortID;
终端。添加((终端)svcTerminal);
}
返回终端;
您可以执行以下操作:

eService.CheckTerminal(guid, ref cityName, ref portName).Select(x => (Terminal) x);
你可以做:

eService.CheckTerminal(guid, ref cityName, ref portName).Select(x => (Terminal) x);
MSDN说

要转换的参数的类型或转换结果的类型(但不能两者都是)必须是包含类型

因此,要使his正常工作,您需要将转换运算符声明移动到要转换到(或从)的类中,即
List
EService.Terminal[]
。因为不能将方法添加到标准类中,所以我建议使用此方法而不是运算符,或者使用LINQ。

MSDN说

要转换的参数的类型或转换结果的类型(但不能两者都是)必须是包含类型


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

谢谢@manojlds,这就是我要找的。Linq永远是最好的方式。祝你好运。谢谢@manojlds,这就是我要找的。Linq永远是最好的方式。祝你好运