【发布时间】:2017-12-05 15:21:35
【问题描述】:
使用 VB.NET,我正在尝试按照 ReSharper 的指南清理代码库。我目前有以下代码:
'oSearchInput is defined outside this question
Dim oSearchRoutines As New SearchClient
Dim oSearchResults As List(Of SearchResult)
oSearchRoutines = 'WcfCallThatReturnsSearchClient
oSearchResults = oSearchRoutines.getSearchResults(oSearchInput).ToList
现在这完全可以正常工作,但 ReSharper 警告 As New SearchClient 有“分配的值未在任何执行路径中使用”。所以我删除了那部分以获得这段代码:
'oSearchInput is defined outside this question
Dim oSearchRoutines
Dim oSearchResults As List(Of SearchResult)
oSearchRoutines = 'WcfCallThatReturnsSearchClient
oSearchResults = oSearchRoutines.getSearchResults(oSearchInput).ToList
如果我理解正确,那么一切都应该完全一样。但是调用ToList时会报错:
未找到类型“SearchResult()”上的公共成员“ToList”。
我不确定为什么我这里的两个 sn-ps 之间有任何区别。
【问题讨论】:
-
As New SearchClient不仅仅是声明类型,它还创建了对象。如果稍后您从 Wcf 方法分配对象,则第一个未使用并且无缘无故地创建。第二个声明Dim oSearchRoutines不会在 Option Strict 下编译,它只是 System.Object。您可以声明一个类型而不创建它:Dim oSearchRoutines As SearchClient -
我不完全确定,但我认为错误消息是由后期绑定和扩展方法的交集引起的。
ToList是Linq提供的扩展方法,所以当你显式声明oSearchRoutines的类型时,编译器知道如何找到ToList,但是当它是Object类型时,运行时解析找不到扩展方法。
标签: .net vb.net winforms resharper