使用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'。
我不确定为什么我这里的两个片段之间有任何区别。
答案 0 :(得分:3)
由于您未在第二个示例中指定类型SearchClient
,oSearchRoutines
将自动为Object
类型。
类型Object
的表达式主要不允许使用Extension methods,例如ToList
- 方法。有关详细信息,请参阅here
以下示例说明了此行为:
Dim x As Object
Dim y As String = "ABC"
x = y
Dim a As List(Of Char) = y.ToList() 'This will work
Dim b As List(Of Char) = x.ToList() 'This will throw a System.MissingMemberException
消息 分配的值未在任何执行路径中使用 ,因为您在第一个示例中使用oSearchRoutines
声明New
而显示。
这是不必要的,因为你在线上为它赋予一个新值...
oSearchRoutines = 'WcfCallThatReturnsSearchClient
......在任何地方使用它之前。
因此,您可以在没有关键字New
Dim oSearchRoutines As SearchClient
相关问题:VB.NET: impossible to use Extension method on System.Object instance