ILIst的Linq表达式在VB.Net中运行但不在C#中运行?

时间:2017-03-25 14:49:57

标签: c# vb.net linq

我正在转换一些代码并使用Telerik的代码转换器然后进行临时更改,但遇到了一些让我感到困惑的事情。我希望尽可能地保持它尽可能接近但是好奇最好的方式。看来

如果我想要一个通用的IList,用于在WPF中的依赖属性中创建列表,该列表可能成为任何对象的IList。我可以在这样的控制台应用程序中进行模拟:

WORKS:

Private _listTest As IList

Public Property ListTest As IList
  Get
    Return _listTest
  End Get
  Set(ByVal value As IList)
    _listTest = value
  End Set
End Property

Sub Main()
  ListTest = New List(Of Integer)({1, 2, 3, 4})
  Dim items = From p In ListTest
End Sub

不工作:

private static IList _listTest;

public static IList ListTest
{
  get { return _listTest; }
  set { _listTest = value; }
}

static void Main(string[] args)
{
  ListTest = new List<int> { 1, 2, 3, 4 };
  //Error:Could not find an implementation of the query pattern for source type 'IList'.  'Select' not found.  Consider explicitly specifying the type of the range variable 'p'.
  var items = from p in ListTest;
}

列表中的问题相当于显式,这是针对泛型的。我想我可以做一个对象列表。但C#中是否有语言解决方案才能使其正常工作?

2 个答案:

答案 0 :(得分:4)

C#LINQ查询语法越接近明确指定"Asia/Tokyo"作为范围变量object的类型。另外我不知道VB.NET,但是在C#p中是必需的(只有当最后一个运算符是select w / o group by子句时才能跳过:

into

参考: How to: Query an ArrayList with LINQ (C#) vs How to: Query an ArrayList with LINQ (Visual Basic)

答案 1 :(得分:0)

您应该考虑制作通用类型列表IList<object>,或者每当您尝试将Linq方法用于列表时,都应使用.OfType<T>.Cast<T>

var items = from p in ListTest.Cast<object>() select p;