Hin*_*nek 14 .net c# web-services ibatis.net .net-3.5
我有一个返回IList的OR映射器(iBatis.Net).
// IList<T> QueryForList<T>(string statementName, object parameterObject);
var data = mapper.QueryForList<Something>(statement, parameters);
Run Code Online (Sandbox Code Playgroud)
我试图在webservice中使用它想要以1:1的方式返回数据.当然我不能在WebMethod中返回IList,因为它是一个接口,因此不可序列化.
我发现映射器确实返回了一个List.但是我害怕将其转换为List,因为当然,mappers的内部工作方式可能会在未来的版本中发生变化(而且它感觉很脏).
我应该......
a) return new List<Something>(data);
b) return (List<Something>)data;
c) // your solution here
Run Code Online (Sandbox Code Playgroud)
非常感谢!
Gre*_*ech 16
如果它真的是一个,List<T>
但你想要防止变化并让它仍然有效,那么最高性能的解决方案是尝试将其转换为列表,如果失败则从其内容创建一个新列表,例如
var data = mapper.QueryForList<T>(statement, parameters);
var list = data as List<T> ?? new List<T>(data);
Run Code Online (Sandbox Code Playgroud)
但是,您提到您无法返回接口,因为它是一个Web服务.对于ASMX和XmlSerializer
类,这可能是正确的,但如果您使用WCF构建Web服务并使用DataContractSerializer
它,那么它将很乐意序列化集合接口(作为服务的输入和输出).虽然这种变化可能比你想要的要大一些!