2010-02-22 79 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