好的,这里-我有三个对象。
public static module foo = new module("John", "A");
public static module bar = new module("Nick", "B");
public static module qux = new module("Alex", "C");
这是我的对象类,
public class module
{
string moduleName { get; set; }
string moduleType { get; set; }
public module(string gName, string gType)
{
moduleName = gName;
moduleType = gType;
}
public string print()
{
return gName;
}
}
我的问题是;我如何检查用户输入(字符串)是否与诸如moduleType之类的参数匹配并返回所述模块?
例如;
string gInput = Console.ReadLine();
比方说,用户输入“ A”,我该如何制作一种方法来检查每个对象的moduleType
,以及模块是否确实具有moduleType
"A"
,在这种情况下是foo
;将使用.print()
方法返回“ John”。
我该如何处理?
答案 0 :(得分:2)
您可以将这些对象保存到列表中
List<module> list = new List<module> {
new module("John", "A"),
new module("Nick", "B"),
new module("Alex", "C")
};
,然后通过用户输入过滤掉:
var obj = list.Where(m => m.moduleType == userInput).FirstOrDefault();
希望有帮助。
答案 1 :(得分:0)
照原样使用代码,您可以将其与每个对象的ModuleType
属性进行比较,以查看匹配的对象。
var gInput = Console.ReadLine();
if (foo.ModuleType == gInput)
Console.WriteLine(foo.ModuleName);
if (bar.ModuleType == gInput)
Console.WriteLine(bar.ModuleName);
if (qux.ModuleType == gInput)
Console.WriteLine(qux.ModuleName);
但是这闻起来很糟糕。将一堆预初始化的对象实例作为类属性没有多大意义。更好的设计是将这些对象作为列表,并查看列表中的哪一个(如果有的话)与输入匹配。
var list = new List<Module>
{
new Module("John", "A"),
new Module("Nick", "B"),
new Module("Alex", "C")
};
var gInput = Console.ReadLine();
Console.WriteLine(list.FirstOrDefault(x => x.ModuleType == gInput)?.ModuleName);
FirstOrDefaul(x => x.ModuleType == gInput)
正在使用LINQ
完成此操作。让我们分解一下。
有问题的列表的类型为Module
。
当您执行list.FirstOrDefault()
时,如果括号中没有任何内容,它将返回列表中的第一项,并且失败(如果列表中没有项),则返回null
或默认值该数据类型的值。例如,如果列表是简单的int
列表,则它将返回int
的默认值,如果list为空,则默认值为零。但这是Module
的列表,因此,如果为空,则将返回null
。但是在我们的例子中,我们有一个非空列表,因此它将返回实例Module
,即列表中的第一个实例。
现在,我们要做的不只是返回第一项。我们可以返回符合条件的第一项 。在您的情况下,您要查找ModuleType
与用户输入匹配的项目。
所以我们用
list.FirstOrDefault(x => x.ModuleType == gInput)
在这里,x
指类型Module
列表中的任何项目(类似于方程式中未知项的X
的数学用法)。因此,这看起来像是英语,就像从x
中找到项list
,使得ModuleType
中的x
等于gInput
。
因此,如果存在,它将返回Module
类型与用户输入匹配的ModuleType
对象。