2016-09-12 5 views
0

Я возвращаю список кодов под названием AllCodes из базы данных SQL. Базовая схема как:Использование параметра метода в качестве ссылки в объекте

id | countrycode | refprint | refscan | reffax 
1 . US . 123 . 234 . 345 

У меня есть метод, который должен необходимо вернуть значение, основанное на согласующий COUNTRYCODE и любой столбец мне нужно от этого результата.

Вот метод (не работает Offcourse), но не знаете, как достичь такого рода вещи с C#

private string GetServiceCode(string cc, string name) 
    { 
     var code = AllCodes.Where(x => x.CountryCode == cc).FirstOrDefault(); 
     if (code != null) 
     { 
      // I want to return whatever {name} is, not code.name 
      // so if name = "refprint" I want to return code.refprint 
      return code.{name}; 
     } 
    } 

    // Example: 
    GetServiceCode("US","refprint"); // Would return 123 
+0

вы можете посмотреть на [Dynamic Linq] (Http: //weblogs.asp. net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library) - тогда это будет '.Select (name)' –

+0

Вы говорите список, но действительно ли вы используете словарь? –

ответ

2

Вы могли бы добиться этого с отражением:

if (code != null) 
{ 
    PropertyInfo pi = code.GetType().GetProperty(name); 
    if (pi == null) return string.Empty; 
    object v = pi.GetValue(code); 
    if (v == null) return string.Emtpy; 
    return v.ToString(); 
} 

С GetProperty() вы можете получите PropertyInfo за имущество с именем name. Затем вы можете использовать GetValue(), чтобы получить значение свойства для определенного экземпляра (code в вашем случае).

В C# 6 можно сократить код

return code.GetType().GetProperty(name)?.GetValue(code)?.ToString() ?? string.Empty; 
0

Как об использовании лямбда:

private string GetServiceCode<T>(string cc, Action<T> action) 
{ 
    var code = AllCodes.Where(x => x.CountryCode == cc).FirstOrDefault(); 
    if (code != null) 
    { 
     return action(code); 
    } 
} 

// Example: 
GetServiceCode("US",(code)=> Console.WriteLine(code.refprint)); 
Смежные вопросы