用C#方法检查ID是否存在以及显示数据插入后

时间:2018-08-03 20:23:18

标签: c#

我正在尝试创建一个CRUD菜单,该菜单允许我在数组中插入数据并按ID搜索。

但是我试图创建一种方法,该方法可以检查id是否存在以及之后显示输出。

问题是该方法不够正确,无法在其他方法以及switch语句中显示。问题是它连续重复两次要检查的ID。

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace menu
{
    class Program
    {
        private static int id = 1;
        enum dataInsert { ID, NAME, SURNAME, ADDRES };

        static void Main(string[] args)
        {
            string[,] matrix = new string[10, 4];

            insertData(matrix);
            searchId(matrix);     
            visualizeByid(matrix);
        }

        static int generateId()
        {
            return id++;
        }

        static void insertData(string[,] matrix)
        {
            int n = generateId();

            for (int j = 1; j < matrix.GetLength(1); j++)
            {
                matrix[n - 1, 0] = Convert.ToString(n);
                Console.Write($"Insert {Enum.GetName(typeof(dataInsert), j)}: ");
                matrix[n - 1, j] = Console.ReadLine();
            }
        }

        static int searchId(string[,] matrix)
        {
            int choosenId, index = -1;

            do
            {
                Console.Write("Insert Id to visualize: ");

            } while (!int.TryParse(Console.ReadLine(), out choosenId));

            for (int i = 0; i < matrix.GetLength(0); i++)
            {
                if (Convert.ToString(choosenId) == matrix[i, 0])
                {
                    index = i;
                }
            }

            return index;
        }

        static void visualizeByid(string[,] matrix)
        {
            int pos = searchId(matrix);

            for (int i = pos; i < pos + 1; i++)
            {
                for (int j = 0; j < matrix.GetLength(1); j++)
                {
                    Console.Write($"{matrix[i, j]}\t");
                }

                Console.WriteLine();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

除非我有误解,否则看来您有很多对象。即使这些仅仅是名称和ID。

public class Obj
{
   public int Id { get; set; }
   public string Name { get; set; }
}

尽管您也可以使用列表,但是您拥有一个数组。

List<Obj> Objects = new List<Obj>();

要通过ID检查列表/数组,您只需使用Linq

if (Objects.Where(o => o.Id == IdToCheck).Count() == 0)
{
  //Insert new object
  Objects.Add(NewObject);
}

答案 1 :(得分:1)

两次显示“插入要显示的ID:”的原因是,您的程序连续两次调用static int searchId(string[,] matrix)

Main

static void Main(string[] args)
        {
            string[,] matrix = new string[10, 4];

            insertData(matrix);
            searchId(matrix); //Here    
            visualizeByid(matrix);  //Called immediately after
        }

还有visualizeByid

static void visualizeByid(string[,] matrix)
    {
        int pos = searchId(matrix); //Here
        ...
    }

通过从Main删除对searchId的调用,您应该能够获得预期的结果。