Я этот код:Получить список имени свойства с лямбда
public string GetPropName<T1, T2>(Expression<Func<T1, T2>> expression)
{
var member = expression.Body as MemberExpression;
if (member != null) return member.Member.Name;
throw new ArgumentException();
}
С его помощью я могу получить имя свойства с Ламбой:
string propName= GetPropName((MyObject o) => o.MyProperty);
// propName will be "MyProperty"
Я хочу, чтобы достичь того же но метод должен вернуть список имен свойств. Например:
List<string> PropNames= GetPropName((MyObject o) => o.MyProp, o.MySecondProp, o.EtcProp);
//PropNames will contains "MyProp", "MySecondProp", "EtcProp"
Как вы думаете, что это возможно?
Заранее спасибо
Edit:
p.s.w.g ответ хорошо работает!
Я нашел другую альтернативу:
public List<String> GetPropNames<T>(params Expression<Func<T, object>>[] navigationProperties)
{
var result = new List<String>();
foreach (var navigationProperty in navigationProperties)
{
var member = navigationProperty.Body as MemberExpression;
if (member == null)
{
throw new ArgumentException();
}
result.Add(member.Member.Name);
}
return result;
}
Тогда я могу назвать это таким образом:
List<String> MyProps= GetPropNames<MyObject>(e => e.MyFirstProp, e => e.MySecondProp,e=> MyEtcProp);
Это тоже работает. Спасибо большое!
Любые причины, по которым вы не хотите использовать 'nameof' вместо этого? Подобная вещь была полезной до «имени», но теперь она не имеет большого значения, ИМО. –
Visual studio 2013. Я не думаю, что смогу использовать его ... :( – Speuline
Хм. Я лично попытаюсь перейти на более новую версию Visual Studio, а не в беспорядок с деревьями выражений ... –