我正在关注一本关于WMI和Powershell的书,并解释了如何在Powershell中创建自定义类。它涉及编写一些C#代码和add-type
命令。当我尝试使用+=
命令在对象中创建多个条目时,出现以下错误:
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 :(得分: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的返回类型来创建数组。
希望这有帮助