C# 如何在VB.net中比较此语句

C# 如何在VB.net中比较此语句,c#,vb.net,C#,Vb.net,在下面的代码中,若语句是在整数之间,那个么我不知道它是如何比较的? 我想让它在C#net中复制 enmBC_LIC_Version作为一个枚举,它只是一个幕后的整数,不同的文字值有着奇特的名称。代码正在对该数字执行按位AND运算,该数字为8。由于8是有效的枚举之一,因此如果枚举不是BC_LIC_DATAM,则结果将为0。简言之,就是看枚举是否设置为BC\u LIC\u DATAM 在C#中,您将使用&进行按位AND运算,因此函数如下所示: return (enmBC_LIC_Version.BC

在下面的代码中,若语句是在整数之间,那个么我不知道它是如何比较的? 我想让它在C#net中复制


enmBC_LIC_Version作为一个枚举,它只是一个幕后的整数,不同的文字值有着奇特的名称。代码正在对该数字执行按位AND运算,该数字为
8
。由于8是有效的枚举之一,因此如果枚举不是BC_LIC_DATAM,则结果将为0。简言之,就是看枚举是否设置为
BC\u LIC\u DATAM

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

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

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

您需要按位

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
}
在.NET4.0及更高版本中,您可以使用


显然Servy是对的。我可以发誓int是在0==false的基础上直接计算到bool的。不知道哪种语言是有效的。

lLicense&&eVersionToCheck
不会编译。他需要一个位,它将使用&;然而,关于问题的意图,您可能是对的。不,它不会编译。&&运算符必须接受bool和bool类型的参数,而不是
enmBC_licu_Version
int
,这正是它产生的语法错误将告诉您的。如果
语句,
lLicense&&eVersionToCheck
本身没有编译为表达式,它甚至不会得到
,因为
操作符&
只接受
bool
bool
的参数。我现在正在查看编译器错误。也许你应该自己编译一下。是的,您可以比较
int
if
块中的枚举,但前提是您使用正确的运算符/方法。返回值的语法在C#中无效。@Servy-Update带有完整示例并将示例代码标记为伪代码。@NeerajKumarGupta-plase请参阅更新的代码。事实证明,您必须显式地将枚举强制转换为Int32。。
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
}
return eVersionToCheck.HasFlag(lLicense);
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
}