Я не уверен, что я так хорошо формулирую, но я хочу это сделать. Я использовал иметь такой код:Как я могу эффективно использовать результат выражения?
Select Case name
Case "ThisProperty": ...
Case "ThatProperty": ...
...
End Select
но name
это свойство на объекте, и я хочу сделать это таким образом, типобезопасного, так что, если свойство изменяется, я ловлю его как ошибка времени компиляции. Так что я хочу такого рода псевдо-код
Select Case name
Case PropertyName(Of MyType)(Function(x) x.ThisProperty): ...
Case PropertyName(Of MyType)(Function(x) x.ThatProperty): ...
...
End Select
где
Function PropertyName(Of T)(propertySpecifier As Expression(Of Func(Of T, Object))) As String
Return {expression magic to get property name as a string}
End Function
Моя PropertyName
функция отлично работает, но вы не можете кодировать Select Case
, как это, и даже если вы можете, я опасаясь, что это будет действительно неэффективно, в жесткой петле, в любом случае, из-за всех манипуляций с выражениями. (И синтаксис действительно утомительный.)
Так что мне интересно, есть ли разумный способ закодировать это для решения этих двух (трех) проблем.
С какими ценностями вы имеете дело? Может быть, попробуйте перечислить? –
Это будет намного проще в [VB.NET 14] (http://blogs.msdn.com/b/vbteam/archive/2014/12/09/new-language-features-in-visual-basic-14. aspx) (VS 2015), поскольку они добавляют оператор 'NameOf'. –
@JacobRoberts: Тогда мне просто нужно обновить Enum вручную, когда имя свойства изменится, что просто изменит проблему где-то еще. То, что я пытаюсь сделать, это заставить компилятор автоматически поймать его, когда я что-то изменил. –