2

現在、いくつかのことを行うメソッドを作成しています。

  • オペレーティング システムのバージョンを確認します。
  • オペレーティング システム プラットフォームを確認します
  • アカウントが null でないことを確認します
  • アカウントが適切な役割にあることを確認します。

今、私が従来のネストされたものを実装すると、それが機能する場合. 絶対に問題はありません-しかし、よりクリーンな実装であると私が信じていることのために、素敵なエラーになりました。

構文:

bool result = false;

WindowsIdentity user = WindowsIdentity.GetCurrent();
WindowsPrincipal role = new WindowsPrincipal(user);

result = ((Environment.OSVersion.Platform == PlatformID.Win32NT && 
     Environment.OSVersion .Version.Major > 6 
     && role != null && role.IsInRole(WindowsBuiltInRole.Administrator) 
     ? true : false);

ただし、次の例外があります。

型andのオペランドに演算子&&を適用することはできません 。System.PlatformIDbool

なぜそれが機能しないのか、私にはよくわかりません。私はロジックを間違って実装していますか、それとも何ですか、私は本当に途方に暮れています。

この構文は機能しますが、上記の条件付きに変換すると機能しません。

if(Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion
    .Version.Major > 6)
{
     WindowsIdentity user = WindowsIdentity.GetCurrent();
     WindowsPrincipal role = new WindowsPrincipal(user);

     if(role != null)
     {

          if(role.IsInRole(WindowsBuiltInRole.Administrator))
          { 
               return true;
          }
     }
     return false;
}
return false;

アップデート:

ここに赤い波線が表示され、Visual Studio で上記のエラーが発生しました。

PlatformID.Win32NT && Environment.OSVersion.Version.Major > 6
4

3 に答える 3

2

条件は次のように書き換えることができます。

bool result = Environment.OSVersion.Platform == PlatformID.Win32NT &&
              Environment.OSVersion.Version.Major > 6 &&
              role.IsInRole(WindowsBuiltInRole.Administrator);

あなたの場合はnullになることはないので、「ロール」のnullチェックをスキップできることに注意してください。

編集

更新に関する限り、問題は次の部分です。

bool result = PlatformID.Win32NT; // <-- this part can't compile, it's not a boolean

あなたが書きたかったことは次のとおりだと思います。

bool result = Environment.OSVersion.Platform == PlatformID.Win32NT; // along with your other conditions

編集2

サンプルが機能しない理由を尋ねたので(タイプミスや正確に何が起こっているのかわからない)、このコードもコンパイルされます(注: 私はそのように書きません、ただ言っているだけです):

bool result = ((Environment.OSVersion.Platform == PlatformID.Win32NT &&
                Environment.OSVersion.Version.Major > 6
                && role != null && role.IsInRole(WindowsBuiltInRole.Administrator)
                    ? true
                    : false));
于 2013-07-21T04:10:29.597 に答える