根据属性及其值过滤对象列表

Filtering list of objects based on properties and their values

晚上好, 我正在构建一个基本的控制台应用程序来学习如何过滤对象列表 属性 数据。我正在尝试根据用户选择的对象 属性 及其值过滤对象列表,但我正在努力概念化如何将用户输入连接到对象 属性,因为属性没有指数。 例如,如果我们有一个汽车列表,用户选择按年份过滤并输入特定年份,我们将 return 这些汽车。

foreach(var car in listOfCars)
{
    if(...)
    {
        Console.WriteLine(car.Name);
        Console.WriteLine(car.Year);
    }
}

我可以使用通配符过滤数据,但是如何将用户选择的输入(数字)连接到 属性?

好吧,它不一定是数字:

Console.WriteLine("Filter by what? You can write YEAR, MAKE or MODEL");
var byWhat = Console.ReadLine();
Console.WriteLine("And what is the search term?");
var term = Console.ReadLine();

List<Car> filtered = new List<Car>();
if(byWhat == "YEAR"){
  int whatYear = int.Parse(term);
  foreach(var car in cars){
    if(car.Year == whatYear)
      filtered.Add(car);
  }
} else if(byWhat == ...) {
  ... foreach(...)
}

如果需要,请随意将其转换为使用数字,并添加一些输入验证、不区分大小写等。

这里的要点是,你可以创建一个变量来代表你将要得到的常见事物;过滤后的汽车列表。你可以做一个 if this then that, else if other then another.. 每个 if 分支意味着过滤后的汽车列表最终不同..但它仍然是最后的汽车列表,所以通过任何过程你做了过滤,可以用同样的方式处理常见形式的输出。

注意;如果你喜欢,你可以把它翻过来,把 if 放在 foreach 里面——它不会 明显地 变慢