如何将变量名称作为字符串搜索变量的obj

时间:2015-02-11 02:52:57

标签: c# linq factual

我有一个很大的对象列表,该对象包含字符串名称,字符串地址,字符串城市等内容。

我想创建一个像这样的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结果,并返回一个由您插入函数的任何变量类型搜索的集合。

1 个答案:

答案 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