2012-08-17 83 views
0

我一直在关注WMI和Powershell,并解释了如何在Powershell中创建自定义类。它涉及编写一些C#代码和add-type命令。当我尝试与+=命令的对象来创建多个条目,我得到以下错误:使用op_Addition创建自定义类

Method invocation failed because [pawobject] doesn't contain a method named 'op_Addition'. 
At line:23 char:14 
+ $MyObjects += <<<< $MyObject 
    + CategoryInfo   : InvalidOperation: (op_Addition:String) [], RuntimeException 
    + FullyQualifiedErrorId : MethodNotFound 

我使用创建类的代码是这样的:

$source = @" 
public class pawobject 
{ 
    public string Description { get; set; } 
    public string Name { get; set; } 
    public int Number { get; set;} 
} 
"@ 

,并添加它的PowerShell我使用以下命令:

Add-Type $source -Language CSharpVersion3 

的代码来创建一个价值是这样的:

$MyObject = New-Object -TypeName pawobject -Property @{ 
    Name = "MyObject5"; 
    Number = 200; 
    Description = "Take3" 
} 

这创建了一个单一的$MyObject。从这里是我的问题来了。我试图创建这样具有多个条目的对象:

$MyObjects += $MyObject 

,但我得到上述错误。我曾尝试

$MyObjects = $MyObjects + $MyObject 

我环顾四周网上,并尝试添加以下代码的public class

public static string Add(string a, string b) { 
    return (a + b); 
} 

,但似乎只与数字工作。我对C#不熟悉,所以我甚至不知道从哪里开始寻找解决这个错误。我可以看到这非常有用,因为我总是在我的环境中创建新对象。能够定义我们自己的类型将是一个巨大的优势,尤其是能够控制哪些类型的数据可以放入每个属性。预先感谢你,祝你有美好的一天!

编辑:让我解释我想要的结果。

我希望能够宣布像这样的:

$MyObject = New-Object -TypeName pawobject -Property @{ 
    Name = "MyObject"; 
    Number = 100; 
    Description = "Take1" 
    } 

当我走的$MyObject输出我结束了这一点:

Description Name   Number 
----------- ----   ------ 
Take1   MyObject  100 

我希望再能声明此:

$MyObjects += $MyObjects 

并以$MyObjects结尾有这样的:

Description Name   Number 
----------- ----   ------ 
Take1   MyObject  100 
Take2   MyObject5 200 

基本上增加(不知道技术术语用于添加对象的两个套)$MyObject$MyObjects

+0

你想CONCAT两个字符串..或者你想添加2个整数..如果是这样,你需要做的返回值的一些转换,如果我正确地理解你的问题 – MethodMan 2012-08-17 15:01:00

+0

我试图连接两个字符串。我会更新主帖以解释我想要做什么。 – Nick 2012-08-17 16:55:50

回答

1

它的训释它把两个物体放在一起 我想在C#中,你将需要实现像这样操作:

public static pawobject operator +(pawobject A, pawobject B) 
    { 

     //I have no idea how you would add two of these together 
    } 

我不确定这实际上是你想要做什么。看起来你想创建一个对象数组。

我测试过了,它确实创建了一个对象数组。

PS C:\Users\James> $source = @" 
>> public class pawobject3 
>> { 
>>  public string Description { get; set; } 
>>  public string Name { get; set; } 
>>  public int Number { get; set;} 
>>  public static pawobject3[] operator +(pawobject3 A, pawobject3 B) 
>>  { 
>>   pawobject3[] Result = new pawobject3[2]; 
>>   Result[0] = A; 
>>   Result[1] = B; 
>>   return Result; 
>>  } 
>>  public static pawobject3[] operator +(pawobject3[] A, pawobject3 B) 
>>  { 
>>   pawobject3[] Result = new pawobject3[A.Length + 1]; 
>>   for(int i = 0; i < A.Length; i++) 
>>    Result[i] = A[i]; 
>>   Result[A.Length] = B; 
>>   return Result; 
>>  } 
>> } 
>> "@ 
>> 
PS C:\Users\James> Add-Type $source -Language CSharpVersion3 
PS C:\Users\James> $MyPaw1 
PS C:\Users\James> $MyPaw1 = New-Object -TypeName pawobject3 -Property @{ 
>> Name = "Test1"; 
>> Number = 1; 
>> Description = "D1"; 
>> } 
>> 
PS C:\Users\James> $MyPaw2 = New-Object -TypeName pawobject3 -Property @{ 
>> Name = "Test2"; 
>> Number = 2; 
>> Description = "D2"; 
>> } 
>> 
PS C:\Users\James> $MyPaw3 = New-Object -TypeName pawobject3 -Property @{ 
>> Name = "Test3"; 
>> Number = 3; 
>> Description = "D3"; 
>> } 
>> 
PS C:\Users\James> $MyPaws = $MyPaw1 + $MyPaw2 
PS C:\Users\James> $MyPaws += $MyPaw3 
PS C:\Users\James> $MyPaws 

Description        Name                  Number 
-----------        ----                  ------ 
D1          Test1                   1 
D2          Test2                   2 
D3          Test3                   3 

您需要确保操作员知道它正在添加在一起。没有声明变量类型,所以创建数组我使用返回类型加2一起。

希望这有助于

+0

我将这两个命令添加到了'$ source = @“”''中,但它给出了一个编译错误。它没有指定错误,它只是说:'不能添加类型。当我运行'Add-Type $ Source'命令时出现编译错误。 – Nick 2012-08-17 17:04:12

+0

@Nick请参阅编辑。 – 2012-08-18 12:49:24

+0

看起来很棒。我无法测试它,直到我星期一重新开始工作,但看起来您的输出正是我正在寻找的。一旦我回到办公室并测试,我会标记正确。再次感谢你,祝你有个愉快的周末。 – Nick 2012-08-19 05:59:38