有没有办法检查现有对象是否包含特定的字符串参数?

时间:2019-11-18 21:26:43

标签: c# string class object

好的,这里-我有三个对象。

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”。

我该如何处理?

2 个答案:

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

编辑:LINQ速成课程

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对象。