我正在尝试创建一个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();
}
}
}
}
答案 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的调用,您应该能够获得预期的结果。