我有一个很大的对象列表,该对象包含字符串名称,字符串地址,字符串城市等内容。
我想创建一个像这样的findEqualsMatch方法..它接受一个名为varName的字符串,然后搜索调用varName的对象的变量。
这样,如果我做data.FindEquals(“name”,“tom”)它搜索对象“name”属性等于tom,同时你可以写“地址”,它会搜索地址属性。
public List<Datum> FindEquals(String varName, String value)
{
List<Datum> results = new List<Datum>();
foreach (Datum result in data)
{
//should search for address variable
// instead of if(result.Address == value)
if (result.varName == value)
results.Add(result);
}
return results;
}
List<Datum> newResults = data.FindEquals("address", "123 street");
整个目的是查询一组事实API结果,并返回一个由您插入函数的任何变量类型搜索的集合。
答案 0 :(得分:1)
您可以使用reflection。从Get property value from string using reflection in C#开始,您的示例将如下所示:
public List<Datum> FindEquals(String varName, String value)
{
List<Datum> results = new List<Datum>();
var propertyInfo = (typeof Datum).GetProperty(varName);
foreach (Datum result in data)
{
String varValue = (string)propertyInfo.GetValue(result, null);
if (varValue == value)
results.Add(result);
}
return results;
}
或者,您可以使用Func<string, Datum>
作为字段访问器参数或相应的表达式树,类似于LINQ-to-SQL(即Get the property name used in a Lambda Expression in .NET 3.5)