在对象中使用方法参数作为引用

本文关键字:引用 参数 使用方法 对象 | 更新日期: 2023-09-27 18:06:35

我从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

在对象中使用方法参数作为引用

您可以通过反射实现:

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(),您可以为名为name的属性获得PropertyInfo。然后,您可以使用GetValue()来获取特定实例的属性值(在您的示例中为code)。

在c# 6中,您可以将代码缩短为

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

如何使用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) );