我从SQL数据库返回一个名为AllCodes的代码列表。基本架构如:
id | countrycode | refprint | refscan | reffax
1 . US . 123 . 234 . 345
我有一个方法,需要根据匹配的国家代码和该结果需要的任何列返回一个值。
这是方法(不工作)但不确定如何用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 :(得分: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;
答案 1 :(得分:0)
如何使用lambda:
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) );