B_D*_*b42 5 c# powershell powershell-3.0 powershell-4.0 powershell-5.0
在Powershell中有许多不同的方法来创建对象.我发布这个作为纯粹在Powerhell中创建对象的挑战.我正在寻找一种使用Add-Type创建对象的方法来传递这些要求:
New-Object
,[My.Object]::New()
,[My.Object]@{'Property'='Value'}
$myVar -is [My.Object]
我知道可以在Visual Studio中创建可以实现此目的的dll,但我正在寻找一种纯粹的Powershell方法来创建对象.
以下是我最接近上述规则的示例:
PS C:\> $memberDef = @"
public String myString { get; set; }
public int myInt { get; set; }
"@
PS C:\> Add-Type -Namespace "My.Namespace" -Name "Object" -MemberDefinition $memberDef
PS C:\> $myObj = [My.Namespace.Object]@{'myString'='Foo'; 'myInt'=42}
PS C:\> $myObj
myString myInt
-------- -----
Foo 42
Run Code Online (Sandbox Code Playgroud)
话虽如此,还有其他(可能更好)的方法来创建外观,感觉和行为像本机Powershell对象的对象?
弱类型对象属性:
PS C:\> $myObj = "" | Select-Object -Property myString, myInt
PS C:\> $myObj = New-Object -TypeName PSObject -Property @{'myString'='foo'; 'myInt'=42}
PS C:\> $myObj = @{}; $myObj.myString = 'foo'; $myObj.myInt = 42
PS C:\> $myObj.myInt = "This should result in an error."
Run Code Online (Sandbox Code Playgroud)
没有命名空间的对象:
PS C:\> $typeDef = @"
public class myObject {
public string myString { get; set; }
public int myInt { get; set; }
}
"@
PS C:\> Add-Type -TypeDefinition $typeDef
PS C:\> $myObj = [myObject]::new()
PS C:\> $myObj = New-Object -TypeName PSObject -Property @{'myString'='foo'; 'myInt'=42}
PS C:\> $myObj.PSObject.TypeNames.Insert(0, "myObject")
Run Code Online (Sandbox Code Playgroud)
这是我发现在 Powershell 中创建对象的最佳方法,该对象是命名空间的一部分并涵盖上述所有规则。
PS C:\> $memberDef = @"
public String myString { get; set; }
public int myInt { get; set; }
"@
PS C:\> Add-Type -Namespace "My.Namespace" -Name "Object" -MemberDefinition $memberDef
PS C:\> $myObj = [My.Namespace.Object]@{'myString'='Foo'; 'myInt'=42}
PS C:\> $myObj
myString myInt
-------- -----
Foo 42
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
441 次 |
最近记录: |