繁体   English   中英

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

[英]Can I pass an anonymous type as a parameter to a function?

阅读这篇文章后,我意识到我无法将匿名类型作为参数传递给函数。 那我还有其他选择吗?

也许通过传递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

我得到的错误是

“对象”类型的表达式不可查询

阅读这篇文章后,我意识到我无法将匿名类型作为参数传递给函数。 那我还有其他选择吗?

该帖子说的是谎言。 当然,您可以将匿名类型传递给方法。

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

以为我会尝试其他一些动态选项,看来您可以通过动态传递纯匿名类型(即,除了上面的字典或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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM