这句话是如何在VB.net中进行比较的
本文关键字:比较 net VB 这句话 | 更新日期: 2023-09-27 18:03:36
在下面的代码中,如果语句是在整数之间,那么我不知道它是如何比较的?我希望它在C#.net 中复制
Public Function QSBarcodeCheckLicenseVersion(ByRef eVersionToCheck As enmBC_LIC_Version) As Boolean
Dim lLicense As Integer
lLicense = 8
**If lLicense And eVersionToCheck Then**
QSBarcodeCheckLicenseVersion = True
Else
QSBarcodeCheckLicenseVersion = False
End If
End Function
Public Enum enmBC_LIC_Version
BC_LIC_DEMO = &H1
BC_LIC_LINEAR = &H2
BC_LIC_PDF417 = &H4
BC_LIC_DATAM = &H8
End Enum
您需要一个位and
:
if ((ILicence & (int)eVersionToCheck) != 0)
那么实际的实施将是:
public bool QSBarcodeCheckLicenseVersion(enmBC_LIC_Version eVersionToCheck)
{
Int32 lLicense = 8;
return ((lLicense & (int)eVersionToCheck) != 0);
}
注意
然而,您可以重新编写方法,只使用枚举值,如@SwDevMan81在他的回答中所示。就使用枚举而言,这可能是更好的形式!
此处演示
它正在进行逐位比较。在C#中,您可以使用"&"。
// Pseudo code
QSBarcodeCheckLicenseVersion = (lLicense & eVersionToCheck);
实际版本:
void Main()
{
enmBC_LIC_Version v = enmBC_LIC_Version.BC_LIC_LINEAR /*| enmBC_LIC_Version.BC_LIC_DATAM*/;
bool outp = QSBarcodeCheckLicenseVersionFunc(v);
Console.WriteLine(outp);
}
public bool QSBarcodeCheckLicenseVersionFunc(enmBC_LIC_Version eVersionToCheck)
{
enmBC_LIC_Version lLicense = enmBC_LIC_Version.BC_LIC_DATAM;
return ((lLicense & eVersionToCheck) == lLicense);
}
// Define other methods and classes here
[Flags]
public enum enmBC_LIC_Version
{
BC_LIC_DEMO = 0x01,
BC_LIC_LINEAR = 0x02,
BC_LIC_PDF417 = 0x04,
BC_LIC_DATAM = 0x08
}
在.NET 4.0及更高版本中,您可以使用HasFlag
return eVersionToCheck.HasFlag(lLicense);
enmBC_LIC_Version
作为一个枚举,只是一个幕后的整数,为不同的文字值提供了奇特的名称。该代码对具有数字8
的该数字执行逐位AND。由于8是有效枚举之一,因此如果枚举不是BC_LIC_DATAM
,则结果将为0。简而言之,就是查看枚举是否设置为BC_LIC_DATAM
。
在C#中,您将使用&
进行逐位AND,因此函数看起来像:
return (enmBC_LIC_Version.BC_LIC_DATAM & eVersionToCheck) != 0;
(注意,我使用了enmBC_LIC_Version.BC_LIC_DATAM
而不是8
,因为它使更容易读取代码。(
Public bool QSBarcodeCheckLicenseVersion(enmBC_LIC_Version eVersionToCheck)
{
int lLicense = 8;
if ((lLicense & eVersionToCheck) != 0)
return true;
else
return false;
}
Public enum enmBC_LIC_Version
{
BC_LIC_DEMO = 1,
BC_LIC_LINEAR = 2,
BC_LIC_PDF417 = 4,
BC_LIC_DATAM = 8
}
显然Servy是对的。我本可以在0==false的基础上,将int直接求值为bool。不知道哪种语言在.