首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >哪种列表/集合类型最适合在WCF数据协定中使用?

哪种列表/集合类型最适合在WCF数据协定中使用?
EN

Stack Overflow用户
提问于 2009-02-27 12:10:38
回答 3查看 7.3K关注 0票数 16

定义WCF数据约定时,应该对集合/列表使用哪种类型?

  • 应该是ICollection、IList、T[]还是...?
  • 我应该使用接口类型还是具体类型?
  • 需要考虑哪些权衡?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-27 12:46:17

注意:我是从客户端的角度来回答这个问题的--即svcutil.exe上的/collectionType:<type>开关(在集成开发环境中也可用)。

就我个人而言,我倾向于保持简单,并使用List<T>。如果你要做大量的数据绑定,BindingList<T>可能是一个选择,但是对于对象属性来说,它通常是多余的。数组让生活变得非常艰难……避开它们;-p

请注意,在.NET 3.5中,由于Enumerable上的扩展方法,每个集合类型可用的功能都变得模糊了。

通常,当您认为可能需要对集合进行子类化以使用virtual扩展点时,Collection<T>很有用。对于WCF,这不是一个真正的选项。

如前所述,除非使用程序集共享,否则不能使用IList<T>等,因为生成的类将无法创建集合。

票数 13
EN

Stack Overflow用户

发布于 2009-02-27 12:14:01

您不能在数据契约中使用接口类型,因为序列化程序不能使用接口类型属性。

你可以使用具体的类型,例如MyClass[]或List

票数 1
EN

Stack Overflow用户

发布于 2009-02-27 12:39:15

除了不能使用接口类型之外,使用哪种集合类型也无关紧要。您的服务的客户端将永远不会看到它们。

请记住,web服务以WSDL或mex的形式向客户端提供了服务的描述。在使用WSDL的情况下,客户端将接收描述要发送和接收的消息的XML模式。在集合的情况下,客户端只会看到一个maxOccurs=为“unbounded”的元素,而不是maxOccurs=为“1”的元素。客户端可能会将其解释为数组、列表或其他任何形式。无论您从服务返回哪个集合,客户端都会看到maxOccurs=是“无界的”,并随心所欲地解释它。

例外情况是返回某种类型的字典,我不知道这是如何工作的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/594499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档