Reporting services 我们为什么给予>;仪表功能ssrs中的0。InStr函数在不给出大于0的值的情况下工作

Reporting services 我们为什么给予>;仪表功能ssrs中的0。InStr函数在不给出大于0的值的情况下工作,reporting-services,ssrs-2008-r2,ssrs-2012,ssrs-tablix,Reporting Services,Ssrs 2008 R2,Ssrs 2012,Ssrs Tablix,为什么我们在instr函数ssrs中给出>0。 InStr函数不提供大于0的值。因为InStr返回搜索字符串中第一次出现的搜索字符串的索引。索引是基于1的,当未找到字符串时,返回的索引是lowerbound(字符串作为字符数组)-1=1-1=0。这是在VB中,在C#f.e.中,它将是0-1=-1 当您使用InStr来确定是否找到了字符串时,您需要布尔结果,要得到它,您需要使用comparison>0,当找到字符串时它返回True,否则返回False 但是,由于boolean和int之间存在隐式转

为什么我们在instr函数ssrs中给出>0。
InStr函数不提供大于0的值。

因为InStr返回搜索字符串中第一次出现的搜索字符串的索引。索引是基于1的,当未找到字符串时,返回的索引是lowerbound(字符串作为字符数组)-1=1-1=0。这是在VB中,在C#f.e.中,它将是0-1=-1

当您使用InStr来确定是否找到了字符串时,您需要布尔结果,要得到它,您需要使用comparison>0,当找到字符串时它返回True,否则返回False

但是,由于boolean和int之间存在隐式转换,您可以直接使用InStr,返回值0(未找到)将转换为False,而任何非零值(找到)将转换为True


虽然这是正确的并且有效,但是这种方式不太明显,并且查看代码
=InStr(…)
,您不能很快地说,需要真正的索引(整数)或者这个索引存在的事实(布尔值)。最后是关于代码可读性和可维护性,不要忘记隐式转换(特别是在不可调试的SSRS代码中)可能会给您带来很多问题。

因为InStr返回搜索字符串中第一次出现的搜索字符串的索引。索引是基于1的,当未找到字符串时,返回的索引是lowerbound(字符串作为字符数组)-1=1-1=0。这是在VB中,在C#f.e.中,它将是0-1=-1

当您使用InStr来确定是否找到了字符串时,您需要布尔结果,要得到它,您需要使用comparison>0,当找到字符串时它返回True,否则返回False

但是,由于boolean和int之间存在隐式转换,您可以直接使用InStr,返回值0(未找到)将转换为False,而任何非零值(找到)将转换为True


虽然这是正确的并且有效,但是这种方式不太明显,并且查看代码
=InStr(…)
,您不能很快地说,需要真正的索引(整数)或者这个索引存在的事实(布尔值)。最后是关于代码可读性和可维护性,不要忘记隐式转换(特别是在不可调试的SSRS代码中)可能会给您带来很多问题。

非常感谢@grafgenerator@grafgenerator