0

In below code if statement is between integers, that I am not getting how its comparing ? I want it to replicate in 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
4

4 回答 4

3

你需要一个位and

if ((ILicence & (int)eVersionToCheck) != 0)

实际的实现将是:

public bool QSBarcodeCheckLicenseVersion(enmBC_LIC_Version eVersionToCheck)
{ 
   Int32 lLicense = 8;

   return ((lLicense & (int)eVersionToCheck) != 0);            
}

笔记

但是,您可以重写该方法以仅使用枚举值,如@SwDevMan81 在他的回答中所示。就使用枚举而言,这可能是更好的形式!

在这里演示

于 2013-03-12T14:26:25.697 回答
1

它进行按位比较。在 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);
于 2013-03-12T14:27:32.883 回答
-1
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是对的。我可以发誓 int 在 0==false 的基础上直接评估为 bool。不知道哪种语言有效。

于 2013-03-12T14:27:46.517 回答
-1

enmBC_LIC_Version,作为一个枚举,只是幕后的一个整数,具有不同文字值的花哨名称。代码对该数字与数字执行按位与8。由于 8 是有效枚举之一,因此如果枚举不是 ,则结果将为 0 BC_LIC_DATAM。简而言之,它正在查看枚举是否设置为BC_LIC_DATAM.

在 C# 中,您将使用&按位 AND,因此函数将如下所示:

return (enmBC_LIC_Version.BC_LIC_DATAM & eVersionToCheck) != 0;

(注意我使用enmBC_LIC_Version.BC_LIC_DATAM了而不是8因为它使代码容易阅读。)

于 2013-03-12T14:24:50.753 回答