C# 使用op_Addition创建自定义类

C# 使用op_Addition创建自定义类,c#,class,powershell-2.0,C#,Class,Powershell 2.0,我跟随一本关于WMI和Powershell的书,书中解释了如何在Powershell中创建自定义类。它包括编写一些C代码和addtype命令。当我尝试使用+=命令在对象中创建多个条目时,会出现以下错误: Method invocation failed because [pawobject] doesn't contain a method named 'op_Addition'. At line:23 char:14 + $MyObjects += <<<< $MyO

我跟随一本关于WMI和Powershell的书,书中解释了如何在Powershell中创建自定义类。它包括编写一些C代码和
addtype
命令。当我尝试使用
+=
命令在对象中创建多个条目时,会出现以下错误:

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
要将其添加到PowerShell,我使用以下命令:

Add-Type $source -Language CSharpVersion3
创建值的代码如下所示:

$MyObject = New-Object -TypeName pawobject -Property @{
    Name = "MyObject5";
    Number = 200;
    Description = "Take3"
}
这将创建一个
$MyObject
。我的问题就是从这里来的。我尝试创建具有多个条目的对象,如下所示:

$MyObjects += $MyObject
    public static pawobject operator +(pawobject A, pawobject B)
    {

        //I have no idea how you would add two of these together
    }
但是我得到了上面的错误。我试过了

$MyObjects = $MyObjects + $MyObject
我在网上四处查看,并尝试在
公共类中添加以下代码:

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

中(不确定添加两组对象的技术术语)它将其解释为将两个对象添加到一起 我认为在c#中,您需要实现如下操作:

$MyObjects += $MyObject
    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
PS C:\Users\James>$source=@”
>>公开课3
>> {
>>公共字符串说明{get;set;}
>>公共字符串名称{get;set;}
>>公共整数{get;set;}
>>公共静态pawobject3[]运算符+(pawobject3 A、pawobject3 B)
>>     {
>>pawobject3[]结果=新的pawobject3[2];
>>结果[0]=A;
>>结果[1]=B;
>>返回结果;
>>     }
>>公共静态pawobject3[]运算符+(pawobject3[]A,pawobject3 B)
>>     {
>>pawobject3[]结果=新的pawobject3[A.Length+1];
>>for(int i=0;i>结果[i]=A[i];
>>结果[A.长度]=B;
>>返回结果;
>>     }
>> }
>> "@
>>
PS C:\Users\James>添加类型$source-语言CSharpVersion3
PS C:\Users\James>$MyPaw1
PS C:\Users\James>$MyPaw1=新对象-类型名pawobject3-属性@{
>>Name=“Test1”;
>>数字=1;
>>Description=“D1”;
>> }
>>
PS C:\Users\James>$MyPaw2=新对象-类型名pawobject3-属性@{
>>Name=“Test2”;
>>数量=2;
>>Description=“D2”;
>> }
>>
PS C:\Users\James>$MyPaw3=新对象-类型名pawobject3-属性@{
>>Name=“Test3”;
>>数字=3;
>>Description=“D3”;
>> }
>>
PS C:\Users\James>$MyPaws=$MyPaw1+$MyPaw2
PS C:\Users\James>$MyPaws+=$MyPaw3
PS C:\Users\James>$MyPaws
描述名称编号
-----------                             ----                                                                     ------
D1测试1
D2测试2
D3测试3
您需要确保操作员知道要添加的内容。这里没有变量类型的声明,所以要创建数组,我将使用加2的返回类型


希望这有帮助

您是否正在尝试连接这两个字符串。。或者您正在尝试添加2个整数。。如果是这样的话,你需要对返回值进行一些转换,如果我正确理解你的问题的话,我正在尝试将两个字符串连接起来。我将更新main post以解释我要做的事情。我将这两个命令添加到
$source=@”“
,但它给出了一个编译错误。它没有指定错误,只是说:
无法添加类型。当我运行
addtype$Source
命令时,出现了编译错误。这看起来太棒了。在我周一回去工作之前我不能测试它,但看起来你的输出正是我想要的。我一回到办公室进行测试,就会把分数打对。再次感谢你,祝你周末愉快。非常感谢。这很有魅力!祝你一周愉快!