假設我有一個有這樣的父子關係的對象:導航父子關係
public class Node
{
public string Name { get; set; }
public string Type { get; set; }
public Node Parent { get; set; }
}
現在,我想創建一個支持語法像這樣的小命令:
Get-Node | where {$_.Type -eq "SomeType" -and $_.Parent.Name -eq "SomeName" }
在這裏,Parent屬性需要以某種方式引用管道中的另一個對象。在PowerShell中甚至可以這樣做嗎?如果不是,有什麼選擇?
[編輯] 如果我使用上面這樣的類:
var root = new Node
{
Name = "root",
Type = "root",
Parent = null
};
var nodeA = new Node
{
Name = "A",
Type = "node",
Parent = root
}
WriteObject(root);
WriteObject(nodeA);
,然後加載模塊,並嘗試這個命令:
Get-MyNode | where {$_.Parent.Name = "root"}
我得到這個錯誤:
Property 'Name' cannot be found on this object; make sure it exists and is settable.
At line:1 char:31
+ Get-MyNode | where {$_.Parent. <<<< Name = "root"}
+ CategoryInfo : InvalidOperation: (Name:String) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
我希望Parent屬性在管道中引用另一個對象,如真實節點對象。
[編輯]此錯誤是由類定義中缺少public關鍵字引起的。添加關鍵字解決了問題,並使示例工作。
你能更具體嗎?我不明白你的意思是「另一個對象」。你有C#和PowerShell的僞代碼,但它們之間的聯繫是微不足道的。 – x0n 2012-08-04 13:52:49
我對PowerShell很新,所以請耐心等待。如果我使用Write對象方法將父引用指向另一個節點,那麼會發生什麼?管道中的對象將有一個名爲Parent的屬性。我能像上面那樣在一個Where-Object語句中使用它嗎? – MvdD 2012-08-06 04:36:57
在上面的代碼示例中,Node類是內部的,因爲它缺少了public修飾符。這可能會使事情複雜化;) – x0n 2012-08-06 17:53:35