我可以将匿名类型作为参数传递给函数吗?

本文关键字:参数传递 函数 类型 我可以 | 更新日期: 2023-09-27 18:04:01

在阅读了这篇文章之后,我意识到我不能将匿名类型作为参数传递给函数。那我还有别的选择吗?

也许,传递一个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

我得到的错误是

类型为"Object"的表达式无法查询

我可以将匿名类型作为参数传递给函数吗?

读完这篇文章后,我意识到我不能将匿名类型作为参数传递给函数。那我还有别的选择吗?

这篇文章在说谎。当然,可以将匿名类型传递给方法。

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没有帮助,因为结果是仍然一个匿名类型的集合。

http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx

我想我应该尝试一些其他的动态选项,似乎你可以通过动态传递一个纯匿名类型(即除了上面的dictionary或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。