错误:从字符串“引用”(“转换为”类型“double”)的转换无效。 [英] Error : conversion from string "reference(" to type 'double' is not valid.

查看:201
本文介绍了错误:从字符串“引用”(“转换为”类型“double”)的转换无效。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在下面的代码中有一个错误,以粗体显示,而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

    &#39;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) &gt; 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆