2010-02-07 17 views
1

我有一個帶有節點和邊的加權圖。在lambda表達式後訪問類的字段

每個節點都包含一個稱爲邊的LinkedList,用於存儲此節點的邊。每個邊都有一個權重和一個節點(另一端的節點)。

我已經這樣做:

static void removeEdge(Node n1, Node n2) 
{ 
    n1.edges.Remove(n1.edges.First(a => a.node == n2)); 
    n2.edges.Remove(n2.edges.First(a => a.node == n1)); 
} 

我試圖做一個updateEdge方法,將採取相同的lambda表達式,然後做到這一點:

(a => a.node == n2).weight = otherValue; 

但我得到一個錯誤。這不是允許的嗎?或者我做錯了什麼?從我測試過的lambda表達式看起來好像就移除元素一樣,雖然我是新手,所以我很失去tbh。

回答

3

我想你誤會了lambda什麼。當你這樣說

...First(x => x.bar == 10) 

會發生什麼,我們產生這樣的:

static bool M(X x) { return x.bar == 10; } 
... 
... First(new Func<X, bool>(M)) 

也就是說,我們做的方法了拉姆達的,然後做一個代表出來的方法,然後通過委託。

做這樣的事情

(x=>x.bar==10).foo = whatever 

在道德上是一樣的做這樣的事情M.foo =什麼的,其中M是一個方法。方法沒有屬性,所以這總是非法的。同樣,lambda也沒有屬性。 lambda只是方法的一種方便的語法。

0

Oooooooh!

我只需要做到這一點:

n1.edges.First(a => a.node == n2).weight = otherValue; 
n2.edges.First(a => a.node == n1).weight = otherValue;