错误:从字符串“引用”(“转换为”类型“double”)的转换无效。 [英] Error : conversion from string "reference(" to type 'double' is not valid.
问题描述
在下面的代码中有一个错误,以粗体显示,而getfacetcount是其中的另一个函数
公共 功能 GetFacets(查询作为查询,facetField < span class =code-keyword> As [ String ]) As IEnumerable(< span class =code-keyword> KeyValuePair( of [ String ],[ 字符串]))
Dim 即 As 整数 = 0
如果 不 facetsCacheContainer.ContainsKey(facetField)然后
Dim cache As 新列表( FacetValueCache)()
如果 reader 没有 然后
Dim 目录 As 目录= FSDirectory.GetDirectory(MainWindow.folderName)
Dim analyzer = 新 KeywordAnalyzer()
Dim reader = IndexReader.Open(目录, True )
reader = IndexReader.Open(目录, True )
Dim parser = 新 QueryParser(Lucene.Net.Util.Version.LUCENE_29,facetField,analyzer)
结束 如果
Dim allDistinctField = FieldCache_Fields。[ DEFAULT ]。GetStrings(reader,facetField).Distinct()
对于 每个 fieldValue 作为 字符串 在 allDistinctField
Dim facetQuery = 新 TermQuery(新术语(facetField,fieldValue))
Dim facetQueryFilter = 新 CachingWrapperFilter(新 QueryWrapperFilter(facetQuery))
如果 cache.Exists( Function (c us)cus.FacetValue = fieldValue)然后
ie = ie + 1
其他
cache.Add(新 FacetValueCache(fieldValue,facetQueryFilter))
结束 如果
下一步
facetsCacheContainer.Add(facetField,cache)
结束 如果
&#39;现在计算facets。
Dim mainQueryFilter = 新 CachingWrapperFilter( New QueryWrapperFilter(query))
Dim facetDefinition = facetsCacheContainer(facetField)
' 此处出错
返回 facetDefinition.Where( Function (fd)fd.GetFacetCount(reader,mainQueryFilter)& gt; 0 )。[选择](功能(fd)新 KeyValuePair( Of [ String ],[ String ])(System.Threading .Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(fd.FacetValue)+ (跨度>; + fd.GetFacetCount(reader,mainQueryFilter)+ ),fd.FacetValue))
结束 功能
错误是从字符串转换引用(到类型'Double'无效。
我尝试过:
i尝试了很多网站和字符串,但仍然出现错误
这看起来很奇怪,但是它没有将fd.GetFacetCount(reader,mainQueryFilter)切换为一个字符串。它保持为双倍,所以'+'然后从连接切换到另外。
只需添加一个隐含的串口:
return facetDefinition _
.Where( Function (fd)fd.GetFacetCount(reader,mainQueryFilter)> 0 )
。选择(功能(fd)新 KeyValuePair( [ String ],[ String ])
(
System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(fd.FacetValue)
+ (
+ fd.GetFacetCount(reader,mainQueryFilter).ToString()
+ ),fd.FacetValue))
在VB.NET中,您可以使用+
或&
来连接字符串:
Visual Basic中的串联运算符 [ ^ ]
Th e+
运算符主要用于数字添加。它有一组复杂的规则,用于确定是否添加,连接,产生编译器错误或抛出运行时异常。
&
运算符总是在必要时将其操作数转换为字符串,并连接字符串。
Dim x 作为 字符串 = 40 + 2 ' 结果:42
Dim y 作为 字符串 = 40& 2 ' 结果:402
因此,您应该始终使用&
运算符来连接字符串。
< pre lang =VB.NET> 返回 facetDefinition.Where(功能(fd)fd.GetFacetCount( reader,mainQueryFilter)> 0 )。[选择](功能(fd)新 KeyValuePair( [ String ],[ String ])(System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(fd.FacetValue)& (& fd.GetFacetCount(reader,mainQueryFilter)& ),fd.FacetValue))
In the below code there is an error that shown in bold and that getfacetcount is another function in it
Public Function GetFacets(query As Query, facetField As [String]) As IEnumerable(Of KeyValuePair(Of [String], [String]))
Dim ie As Integer = 0
If Not facetsCacheContainer.ContainsKey(facetField) Then
Dim cache As New List(Of FacetValueCache)()
If reader Is Nothing Then
Dim directory As Directory = FSDirectory.GetDirectory(MainWindow.folderName)
Dim analyzer = New KeywordAnalyzer()
Dim reader = IndexReader.Open(directory, True)
reader = IndexReader.Open(directory, True)
Dim parser = New QueryParser(Lucene.Net.Util.Version.LUCENE_29, facetField, analyzer)
End If
Dim allDistinctField = FieldCache_Fields.[DEFAULT].GetStrings(reader, facetField).Distinct()
For Each fieldValue As String In allDistinctField
Dim facetQuery = New TermQuery(New Term(facetField, fieldValue))
Dim facetQueryFilter = New CachingWrapperFilter(New QueryWrapperFilter(facetQuery))
If cache.Exists(Function(cus) cus.FacetValue = fieldValue) Then
ie = ie + 1
Else
cache.Add(New FacetValueCache(fieldValue, facetQueryFilter))
End If
Next
facetsCacheContainer.Add(facetField, cache)
End If
'now calculate facets.
Dim mainQueryFilter = New CachingWrapperFilter(New QueryWrapperFilter(query))
Dim facetDefinition = facetsCacheContainer(facetField)
'Error here
Return facetDefinition.Where(Function(fd) fd.GetFacetCount(reader, mainQueryFilter) > 0).[Select](Function(fd) New KeyValuePair(Of [String], [String])(System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(fd.FacetValue) + "("; + fd.GetFacetCount(reader, mainQueryFilter) + ")", fd.FacetValue))
End Function
error is Conversion from string "Reference(" to type 'Double' is not valid.
What I have tried:
i have tried many sites and string but still the error is comes
It seems odd, but it's not switching fd.GetFacetCount(reader, mainQueryFilter) to a string. It's staying as a double so the '+' then switches from concatenation to addition.
Just add a tostring to make it implicit:
return facetDefinition _ .Where(Function(fd) fd.GetFacetCount(reader, mainQueryFilter) > 0) .Select(Function(fd) New KeyValuePair(Of [String], [String]) ( System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(fd.FacetValue) + "(" + fd.GetFacetCount(reader, mainQueryFilter).ToString() + ")", fd.FacetValue))
In VB.NET, you can use either+
or&
to concatenation strings:
Concatenation Operators in Visual Basic[^]
The+
operator is primarily intended for numeric addition. It has a complex set of rules that determine whether to add, concatenate, produce a compiler error, or throw a run-time exception.
The&
operator always converts its operands to strings if necessary, and concatenates the strings.
Dim x As String = "40" + 2 ' Result: "42" Dim y As String = "40" & 2 ' Result: "402"
Therefore, you should always use the&
operator to concatenate strings.
Return facetDefinition.Where(Function(fd) fd.GetFacetCount(reader, mainQueryFilter) > 0).[Select](Function(fd) New KeyValuePair(Of [String], [String])(System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(fd.FacetValue) & "(" & fd.GetFacetCount(reader, mainQueryFilter) & ")", fd.FacetValue))
这篇关于错误:从字符串“引用”(“转换为”类型“double”)的转换无效。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!