繁体   English   中英

C# 控制台应用程序,用户输入资源并被告知需要什么垃圾

[英]C# Console Application where user enters resource and is told what Junk is required

希望有人可以提供帮助。 我是 C# 的一个非常基础的初学者。 我为自己设置了创建控制台应用程序的任务,在该应用程序中输入我需要的资源,即拧入或拧入控制台,按回车键,它会从包含该单词的列表中检索所有垃圾,以及您将收到的资源量从垃圾。 所以 Type Writer 是 2 个螺丝。 它适用于 Fallout 76,所以我可以看到哪些垃圾包含哪些资源。

但是我有几个问题:

  1. 控制台只返回一个螺丝结果,即使有多个结果。 (我如何解决这个问题并收到多个结果?即剪贴板和玩具车)
  2. 我如何搜索并获得部分匹配的结果,即如果我输入了螺丝或螺丝?
  3. 有没有更好的方法来创建一个控制台应用程序,您可以在其中存储值并让用户搜索这些值? 我找不到任何接近我需要在互联网上搜索的东西。

谢谢大家的帮助。

    using System;
using System.Collections.Generic;
class JunkList
{
    public string Resource { get; set; }
    public string Junk { get; set; }
    public int Amount { get; set; }

    public JunkList(string r, string j, int a)
    {
        this.Resource = r;
        this.Junk = j;
        this.Amount = a;
    }
}

class Program
{
    static void Main(string[] args)
    {
        string searchName;
        List<JunkList> infoList = new List<JunkList>();
        infoList.Add(new JunkList("Screw", "Type Writer", 2));
        infoList.Add(new JunkList("Screw", "Clip Board", 1));
        infoList.Add(new JunkList("Screw", "Toy Car", 3));
        Console.Write("Which resource do you want to search for?? \n");
        searchName = Console.ReadLine();
        for (int i = 0; i < infoList.Count; i++)
        {
            if (string.Compare(searchName, infoList[i].Resource, true) == 0)
            {
                Console.Write("Resource : " + infoList[i].Resource + "\n");
                Console.Write("Junk : " + infoList[i].Junk + "\n");
                Console.Write("Resource Amount : " + infoList[i].Amount + "\n");
                break;
            }
        }
        Console.ReadKey();
    }
}

控制台只返回一个螺丝结果,即使有多个结果。 (我如何解决这个问题并收到多个结果?即剪贴板和玩具车)

您的问题是您在找到第一个结果后就崩溃了:

if (string.Compare(searchName, infoList[i].Resource, true) == 0)
{
     Console.Write("Resource : " + infoList[i].Resource + "\n");
     Console.Write("Junk : " + infoList[i].Junk + "\n");
     Console.Write("Resource Amount : " + infoList[i].Amount + "\n");
     break; // REMOVE THIS LINE
}

break意味着您正在退出for循环,因此您实际上是在找到结果后立即退出。

我如何搜索并获得部分匹配的结果,即如果我输入了螺丝或螺丝?

您可以更改您的if条件

if (string.Compare(searchName, infoList[i].Resource, true) == 0)

类似于

if (infoList[i].Resource.ToLowerInvariant().Contains(searchName.ToLowerInvariant()))

这将检查插入的字符串是否包含在列表中的字符串之一中。 ToLowerInvariant用于使搜索不区分大小写。

当然,这不是模糊搜索,所以搜索screws不会导致任何结果。 进行模糊搜索有点复杂,它可能不在这个问题的 scope 范围内。

有没有更好的方法来创建一个控制台应用程序,您可以在其中存储值并让用户搜索这些值? 我找不到任何接近我需要在互联网上搜索的东西。

基于意见的问题不适用于 StackOverflow,而要求更好的方法来做某事就是其中之一。 我不认为你会得到这个答案。

为了减少主观性,我将您的最后一个问题解释为“是否有一种通用的软件模式或方法用于存储可以轻松搜索的数据对象?”

在这方面,您正在描述数据库真正擅长的特性和功能,特别是存储一些数据表并提供使用您定义的标准搜索(查询)它的快速方法。

C# 和 .NET 框架提供了一些非常深入和强大的工具,用于利用数据库和管理数据类(如JunkList和数据库表)之间的映射; 这些类型的工具称为 ORM 或 Object 关系映射器,您会在 Microsoft 的文档中看到对它们的引用,尤其是实体框架。

开始时,更复杂的 ORM 可能会有点不知所措,所以从小处着手并不是一个坏主意。 查看一些非常简单的 ORM,它们使用 SQLite 之类的东西,它们只存在于一个文件中并且需要最少的依赖项(调用数据库的行为实际上足以创建它。)。

您可以查看https://github.com/praeclarum/sqlite-net ,它很容易在几分钟内完成设置,并且只需使用其文档中提供的基础知识即可开始使用。

  1. 你只得到一个结果的原因是因为break语句。 它取消了for循环。 尝试删除它。

  2. 尝试查看String.Contains()方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM