这句话是如何在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

这句话是如何在VB.net中进行比较的

您需要一个位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。不知道哪种语言在.

中有效