根据属性及其值过滤对象列表
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
里面——它不会 明显地 变慢
晚上好, 我正在构建一个基本的控制台应用程序来学习如何过滤对象列表 属性 数据。我正在尝试根据用户选择的对象 属性 及其值过滤对象列表,但我正在努力概念化如何将用户输入连接到对象 属性,因为属性没有指数。 例如,如果我们有一个汽车列表,用户选择按年份过滤并输入特定年份,我们将 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
里面——它不会 明显地 变慢