Более сложный параметр атрибута - PullRequest
0 голосов
/ 26 января 2019

Я хочу использовать System.Attribute для создания метаданных для моего класса. мне нужно использовать преимущества компилятора при получении имен вместо использования string s. но мой подход не может быть сделан, потому что attibutes не принимает сложный параметр, как я написал здесь:

Public Class Foo
   Public Property Id as Integer
   <Attribute(AttributeInputA.Create(of Bar)(Function(item) item.Name))>
   Public Property Name as String
End Class 
Public Class Bar
    Public Property Name as String
End Class
<AttributeUsage(AttributeTargets.Property Or
                   AttributeTargets.Field,
                   AllowMultiple:=True)>
Public Class Attribute
   Public Sub New(attibuteInputA as AttributeInputA)
   End Sub
End Class
Public Class AttributeInputA
    Public Share Function Create(Of T)(System.Linq.Expressions.Expression(Of Func(Of Object , T)) AS AttributeInputA
    End Function
End Class

Что я хочу знать, так это то, что есть ли другие способы достичь этого?

1 Ответ

0 голосов
/ 26 января 2019

Вы можете десериализовать строку во что угодно.В этом случае вы будете использовать код в качестве источника для CodeDom (требуется наличие компилятора) или Reflection.Emit (который не требует, но нуждается в IL).

в любом случае, кажется, что это большая проблема, если не много вознаграждения.Я написал бы конкретный случай, который мне был нужен, и затем использовал бы поиск по словарю или класс, чтобы найти его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...