Могу ли я передать анонимный тип в качестве параметра функции? - PullRequest
2 голосов
/ 01 августа 2011

После прочтения этого поста я понял, что не могу передать анонимный тип в качестве параметра функции. Так какие еще варианты у меня есть?

Возможно, передача 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

И я получаю ошибку

Выражение типа «Объект» не запрашивается

Ответы [ 2 ]

2 голосов
/ 01 августа 2011

После прочтения этого поста я понял, что не могу передать анонимный тип в качестве параметра функции.Так какие еще варианты у меня есть?

Пост лжет.Конечно, вы можете передавать анонимные типы в метод.

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 совсем не помогает, так как в результате все еще коллекция анонимных типов.

0 голосов
/ 01 августа 2011

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

Думаю, я опробую некоторые другие динамические параметры, и кажется, что вы можете передавать чистый анонимный тип через динамический (т. Е. В дополнение к описанным выше опциям словаря или расширения).

    [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.

...