1

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

我想创建一个像这样的 findEqualsMatch 方法。它接受一个名为 varName 的字符串,然后搜索调用 varName 的对象的变量。

这样,如果我执行 data.FindEquals("name", "tom") 它会搜索对象“name”属性以使其等于 tom,同时您可以编写“address”,它将搜索 address 属性。

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 结果并返回一个由您插入到函数中的任何变量类型搜索的集合。

4

1 回答 1

1

您可以使用反射。从使用 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 的字段访问器参数或相应的表达式树(即获取 .NET 3.5 中的 Lambda 表达式中使用的属性名称

于 2015-02-11T03:42:09.047 回答