0

私はこれら2つの違いが何であるかを本当に理解していません:

If (self.someEnum == someEnumValue1 || self.someEnum == someEnumValue2)
{
// Do some stuff
}

If (self.someEnum == (someEnumValue1 | someEnumValue2) )
{
// Do some stuff
}

2番目のものは明らかに機能していませんが、警告やエラーは発生しませんが、それが何のためにあるのかわかりません。

このスイッチのように機能すると思いました:

switch (self.someEnum){
    case someEnumValue1:
    case someEnumValue2:
    {
    // Do some stuff
    }
    break;

    default: break;
}
4

2 に答える 2

1

|はビット単位のOR演算子なので、あなたの行;

if (self.someEnum == (someEnumValue1 | someEnumValue2) )

ここで、someEnumValue1 = 5 および someEnumValue2 = 2 は次のようになります。

if (self.someEnum == (5 | 2) )

これはと同じです

if (self.someEnum == 7 )

...これは、someEnum が 5 または 2 のいずれかである場合、どちらにも一致しません。

やりたいことを行うには、基本的に 2 つの方法があります。比較を個別に行うか、switch/case;を使用します。

switch(self.someEnum) {
  case 5:
  case 2:
    ...do your stuff if 5 or 2...
    break;
  default:
    ...and here you do your stuff if they're not...
}

後者は、多くの比較がある場合に役立ちます。通常、現在のバージョンの方が読みやすい場合はほとんどありません。

于 2013-08-02T12:54:12.970 に答える