我正在转换一些代码并使用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#中是否有语言解决方案才能使其正常工作?
答案 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;