Можно ли использовать перечисление с выражениями для отражения значений перечисления? Рассмотрим эту гипотетическую процедуру:
public enum Fruit
{
Apple,
Pear
}
public void Foo(Fruit fruit)
{
Foo<Fruit>(() => fruit);
}
public void Foo<T>(Expression<Func<T>> expression)
{
//... example: work with Fruit.Pear and reflect on it
}
Bar()
предоставит мне информацию о перечислении, но я хочу работать с фактическим значением.
Предыстория: я добавлял несколько вспомогательных методов для возврата информации CustomAttribute для типов и задавался вопросом, можно ли использовать аналогичную процедуру для перечислений.
Я полностью осознаю, что вы можете работать с типом enum, чтобы получить CustomAttributes таким образом.
Обновление:
Я использую аналогичную концепцию в MVC со вспомогательными расширениями:
public class HtmlHelper<TModel> : System.Web.Mvc.HtmlHelper<TModel>
{
public void BeginLabelFor<TProperty>(Expression<Func<TModel, TProperty>> expression)
{
string name = ExpressionHelper.GetExpressionText(expression);
}
}
В этом примере name
будет именем члена модели. Я хочу сделать то же самое с перечислениями, поэтому имя будет enum 'member'. Это вообще возможно?
Обновленный пример:
public enum Fruit
{
[Description("I am a pear")]
Pear
}
public void ARoutine(Fruit fruit)
{
GetEnumDescription(() => fruit); // returns "I am a pear"
}
public string GetEnumDescription<T>(/* what would this be in a form of expression? Expression<T>? */)
{
MemberInfo memberInfo;
// a routine to get the MemberInfo(?) 'Pear' from Fruit - is this even possible?
if (memberInfo != null)
{
return memberInfo.GetCustomAttribute<DescriptionAttribute>().Description;
}
return null; // not found or no description
}
ToString()
, который даст вам имя, связанное со значением. - person Jon Skeet   schedule 23.08.2013ToString
. Если это не то, что вы хотите, вам действительно нужно привести полный пример того, как вы собираетесь вызватьFoo(Fruit)
и чего вы ожидаете от результата. - person Jon Skeet   schedule 23.08.2013