Поделиться через


Не удается преобразовать анонимный тип в дерево выражений, поскольку он содержит поле, которое было использовано в инициализации другого поля

Обновлен: Ноябрь 2007

Cannot convert anonymous type to expression tree because it contains a field that is used in the initialization of another field

Компилятор не принимает преобразование анонимных типов к дереву выражений, если одно свойство анонимного типа используется для инициализации другого свойства анонимного типа. Например, в следующем примере, Prop1 является объявленной в списке инициализации и затем используется как начальное значение для Prop2.

Module M2

    Sub ExpressionExample(Of T)(ByVal x As Expressions.Expression(Of Func(Of T)))
    End Sub

    Sub Main()
        ' The following line causes the error.
        ' ExpressionExample(Function() New With {.Prop1 = 2, .Prop2 = .Prop1})

    End Sub
End Module

Идентификатор ошибки: BC36548

Чтобы исправить эту ошибку

  • Присвойте начальное значение для локальной переменной Prop1. Присвойте начальные значения обеим переменным (Prop1 и Prop2), как показано в следующем коде.

    Sub Main()
    
        Dim temp = 2
        ExpressionExample(Function() New With {.Prop1 = temp, .Prop2 = temp})
    
    End Sub
    

См. также

Задачи

Практическое руководство. Использование деревьев выражений для построения динамических запросов

Основные понятия

Анонимные типы

Деревья выражений в LINQ