Я знаю, что есть способы, но есть ли на самом деле хороший способ?
На данный момент у меня есть достойная структура на основе атрибутов, которая работает очень хорошо, за исключением многословия:
public Variable<int> Value { get { return Get.Int(MethodBase.CurrentMethod()); } }
Представьте себе, * несколько сотен (часто с сеттерами тоже). Есть ли способ получить тот же результат, но более краткий?
Я считал:
public Variable<int> Value { get { return Get.Int("Value"); } }
и пробовал:
public Variable<int> Value { get { return Get.Int(() => Value); } }
Но так как многие из этих переменных (в этом безумии есть метод, я обещаю) меня беспокоят неясные ошибки, связанные со вторым значением (или строкой), не совпадающим с первым.
Так что мой вопрос: кто-нибудь может придумать более аккуратный способ написания вышесказанного? Все, что мне нужно, это текущее имя свойства.
Мое любимое "решение" до сих пор было:
protected Func<MethodBase> Self = MethodBase.GetCurrentMethod;
public Variable<int> Value { get { return Get.Int(Self()); } }
Что коротко, мило и красиво смотреться.
Но, увы, JIT убивает правила как вариант. Есть ли способ, которым я могу переписать GetCurrentMethod в C #, под другим именем? Жаль, что StackCrawlMark (который, я считаю, необходим) является внутренним компонентом системы.
В качестве альтернативы, есть ли какие-либо инструменты, совместимые с ReSharper, но, возможно, я позволю мне просматривать код через очки, уменьшая многословный MethodBase.GetCurrentMethod до чего-то более короткого и сладкого, в то же время компилируя точно так же? (Я действительно предпочел бы, чтобы у меня не было шага предварительной компиляции, но я открыт для предложений - тот, который сводит все это к имени свойства, был бы хорош).