2011-10-04 71 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