2010-02-22 74 views
0

我有一個類型讓我們稱之爲「MyType」。我有一個List(Of MyType)。這是我在做什麼:在lambda表達式中的VB.Net和類型推論?

MyList.Sum(Function(x) x.MyFieldToTotal) 

「MyFieldToTotal」是一個小數。對於我的生活,我無法弄清楚爲什麼x上面是一個對象而不是「MyType」類型。在這種情況下不應該使用類型推理嗎?即使在智能感知我得到 「選擇爲System.Func(中的MyType)爲十進制」

爲了測試C#& vb.net之間的差異,我做了以下內容:

dim MyVar as new list(Of System.IO.FileStream) 
MyVar.Sum(Function(x) x. 

List<System.IO.FileStream> MyVar = new List<System.IO.FileStream>(); 
MyVar.Sum(x=>x. 

在VB.Net x爲類型爲Object,而在C#x中則是FileStream類型。那麼爲什麼在這種情況下使用c#而不是vb.net進行類型提示?

另外,還要注意「選項推斷」爲ON

+0

您正在使用哪個版本的Visual Studio/VB.Net? – jeroenh 2010-02-22 21:22:52

+0

我可以告訴你,我現在試用VS 2010,它的工作原理。 VS 2008沒有去。看起來像一個VS 2008的錯誤。 – coding4fun 2010-02-23 01:50:50

回答

1

的類型推斷工作在編譯器的水平,但似乎智能感知發動機沒有拿起它(只是試圖在VS2008)。

在完成聲明,VS不會將其識別爲一個FileStream對象(見提示)...

Dim MyList = New List(Of System.IO.FileStream)() 
    Dim result = MyList.Sum(Function(x) x.Length) 

編輯:這是隻在VS2008中的錯誤;在VS2010中修復RC

+0

是的,你的權利。看起來像一個VS 2008的錯誤。驚訝其中有很多人沒有遇到的東西。好驚訝。我想也許是因爲我使用了resharper,但看起來像那樣。 – coding4fun 2010-02-23 01:53:57

+0

這真的很糟糕,你沒有獲得智能感知。 – coding4fun 2010-02-23 02:43:03

+0

@ user127954它已在VS2010中修復 – jeroenh 2010-02-23 08:11:46