簡體   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