阅读this post后,我意识到我无法将匿名类型作为参数传递给函数。那么我还有其他选择吗?
或许,传递Query.ToList
作为参数会有所帮助,还是我正在重新发明轮子?
更新:我有以下查询,我想将其传递给函数:
Sub Test
Dim Query = (From c In DB Select New With { .ElementName = c.Name })
DoSomething(Query)
End sub
Private Function DoSomething(ByVal Q as object) as string
Dim Query = From c In Q Select c
End Function
我得到的错误是
“对象”类型的表达式不可查询
答案 0 :(得分:2)
阅读这篇文章后,我意识到我无法将匿名类型作为参数传递给函数。那么我还有其他选择吗?
帖子说谎。当然,可以将匿名类型传递给方法。
Function DoSomething(Of T)(items As IEnumerable(Of T))
…
End Function
Dim Query = (From c In DB Select New With {.ElementName = c.Name})
DoSomething(Query)
在任何一种情况下,您对DoSomething
的定义都是问题,因为Object
当然不是可查询对象。 ToList
完全没有帮助,因为结果仍然是匿名类型的集合。
答案 1 :(得分:-1)
http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx
以为我会尝试其他一些动态选项,看来你可以通过动态传递纯匿名类型(即除了上面的字典或expando选项)。
[Test]
public void Test()
{
dynamic d;
int i = 20;
d = (dynamic) i;
Console.WriteLine(d);
}
[Test]
public void Test2()
{
dynamic d;
int i = 20;
d = (dynamic)new { a = 1, b = 12.2, c = "some text" };
MethodA(d);
Console.WriteLine(d);
}
public void MethodA(dynamic o)
{
}
其他选项:ExpandoObject。