首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用op_Addition创建自定义类

使用op_Addition创建自定义类
EN

Stack Overflow用户
提问于 2012-08-17 22:55:18
回答 1查看 941关注 0票数 1

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

代码语言:javascript
复制
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

我用来创建这个类的代码如下:

代码语言:javascript
复制
$source = @"
public class pawobject
{
    public string Description { get; set; }
    public string Name { get; set; }
    public int Number { get; set;}
}
"@

为了将它添加到PowerShell,我使用以下命令:

代码语言:javascript
复制
Add-Type $source -Language CSharpVersion3

创建值的代码如下所示:

代码语言:javascript
复制
$MyObject = New-Object -TypeName pawobject -Property @{
    Name = "MyObject5";
    Number = 200;
    Description = "Take3"
}

这将创建单个$MyObject。这就是我的问题所在。我尝试创建具有多个条目的对象,如下所示:

代码语言:javascript
复制
$MyObjects += $MyObject

但是我得到了上面的错误。我试过了

代码语言:javascript
复制
$MyObjects = $MyObjects + $MyObject

我在网上浏览了一下,并尝试在public class中添加以下代码

代码语言:javascript
复制
public static string Add(string a, string b) {
    return (a + b);
}

但这似乎只适用于数字。我对C#一点也不熟悉,所以我甚至不知道从哪里开始修复这个错误。我可以看到这是非常有用的,因为我总是在我的环境中创建新对象。能够定义我们自己的类型将是一个巨大的优势,特别是能够控制可以将什么类型的数据放入每个属性中。提前谢谢你,祝你有愉快的一天!

编辑:让我解释一下我想要结果做什么。

我希望能够声明这样的东西:

代码语言:javascript
复制
$MyObject = New-Object -TypeName pawobject -Property @{
    Name = "MyObject";
    Number = 100;
    Description = "Take1"
    }

当我接受$MyObject的输出时,我得到的结果是:

代码语言:javascript
复制
Description   Name         Number
-----------   ----         ------
Take1         MyObject     100

然后,我希望能够声明:

代码语言:javascript
复制
$MyObjects += $MyObjects

最终得到的$MyObjects是这样的:

代码语言:javascript
复制
Description   Name         Number
-----------   ----         ------
Take1         MyObject     100
Take2         MyObject5    200

基本上是将$MyObject添加到$MyObjects (不确定用于添加两组对象的技术术语

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-17 23:18:43

它将其解释为将两个对象相加,我认为在c#中,您需要像这样实现操作:

代码语言:javascript
复制
    public static pawobject operator +(pawobject A, pawobject B)
    {

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

但我不确定这是否真的是你想要做的。看起来你想创建一个对象数组。

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

代码语言:javascript
复制
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相加的返回类型。

希望这能有所帮助

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12008144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档