2011-10-04 76 views
1

任何人都可以解釋爲什麼以下(使用System命名空間限定符)行爲的工作原理:PowerShell的添加型並不如預期

Add-Type @" 
public class BitValueChecker 
{ 
    public static bool IsBitSetZeroBased(uint value, uint bitNumber) 
    { 
     if (bitNumber < 0 || bitNumber >= 32) 
      throw new System.Exception("Invalid bit number must be >= 0 and <= 31"); 

     uint checkValue = value & System.Convert.ToUInt32(System.Math.Pow(2, bitNumber)); 
     return checkValue > 0; 
    } 
} 
"@ 

而下方(基本相同)片段導致PS抱怨ExceptionConvertMath「在當前情況下不存在」?

Add-Type @" 
public class BitValueChecker 
{ 
    public static bool IsBitSetZeroBased(uint value, uint bitNumber) 
    { 
     if (bitNumber < 0 || bitNumber >= 32) 
      throw new Exception("Invalid bit number must be >= 0 and <= 31"); 

     uint checkValue = value & Convert.ToUInt32(Math.Pow(2, bitNumber)); 
     return checkValue > 0; 
    } 
} 
"@ 

回答

2

在你的第二個代碼,您必須添加

Add-Type @" 
using System; 

public class BitValueChecker 
{ 
.... 

像在C#代碼。

+3

擊敗我吧。令人討厭的是PS文檔中的這一點:「默認情況下,Add-Type引用System命名空間。」 –

+0

如果使用參數-membertype添加系統名稱空間! –

+1

@大衛教皇 - 什麼惱人的位?您在引用和使用之間混淆不清。即使在Visual Studio中,您也必須參考並使用它。只是當你創建一個項目時系統被引用,並且還添加了一個使用系統。 – manojlds