c# - 从列表比较中检索所有值并修改它们
问题描述
我被锁定以显示列表成员、比较和修改成员。该程序是一家汽车商店,我得到了供应商(销售员),客户(供应商的相同方法),我将拥有汽车/货物/等的接口......
现在专注于这个列表的方法:
public static List<Venditori> Venditori = new List<Venditori>();
这些是供应商的财产:
public class Venditori
{
public Guid Id { set; get; }
public string NomeVenditore { get; set; }
public string CognomeVenditore { get; set; }
public string TelefonoVenditore { get; set; }
public string EmailVenditore { get; set; }
public bool VenditoreAttivo { get; set; }
public string DateTime { get; set; }
public Venditori(Guid id, string nomevenditore, string cognomevenditore, string telefonovenditore,
string emailvenditore, bool venditoreattivo, string datetime)
{
this.Id = id;
this.NomeVenditore = nomevenditore;
this.CognomeVenditore = cognomevenditore;
this.TelefonoVenditore = telefonovenditore;
// Without this.
EmailVenditore = emailvenditore;
VenditoreAttivo = venditoreattivo;
DateTime = datetime;
venditoreattivo = true;
}
}
这是插入值的方法,也打印我刚刚插入到列表中的内容:
public static Venditori Registravenditore()
{
Venditori v = new Venditori();
v.Id = Guid.NewGuid();
Console.Clear();
Console.WriteLine();
Console.WriteLine("-------------------------------------");
Console.WriteLine("- Inserisci il Nome del Venditore : -");
Console.WriteLine("-------------------------------------");
v.NomeVenditore = Console.ReadLine();
Console.Clear();
Console.WriteLine();
Console.WriteLine("----------------------------------------");
Console.WriteLine("- Inserisci il Cognome del Venditore : -");
Console.WriteLine("----------------------------------------");
v.CognomeVenditore = Console.ReadLine();
Console.Clear();
Console.WriteLine();
Console.WriteLine("-----------------------------------------");
Console.WriteLine("- Inserisci il Telefono del Venditore : -");
Console.WriteLine("-----------------------------------------");
v.TelefonoVenditore = Console.ReadLine();
Console.Clear();
Console.WriteLine();
Console.WriteLine("-------------------------------------");
Console.WriteLine("- Inserisci la Mail del Venditore : -");
Console.WriteLine("-------------------------------------");
v.EmailVenditore = Console.ReadLine();
v.DateTime = DateTime.Now.ToString();
Liste.Venditori.Add(v);
Console.Clear();
Console.WriteLine("");
Console.WriteLine("---------------------------------------------------------------------------------------------------");
Console.WriteLine($"- Hai inserito il venditore {v.NomeVenditore} - {v.CognomeVenditore} - Avente GuId - {v.Id} - ");
Console.WriteLine($"- Il telefono è : {v.TelefonoVenditore} - La sua mail è : {v.EmailVenditore}");
Console.WriteLine($"- Il Venditore è attivo dal : {v.DateTime}");
Console.WriteLine("---------------------------------------------------------------------------------------------------");
Console.WriteLine("");
return v;
}
问题是问题1:当我启动列出( ElencoVenditori() )所有供应商和相关属性的方法时,只返回最后一个插入。我尝试使用 Liste.Venditori.FindAll() 但需要在 FindAll 中插入一些参数,我不知道我必须通过什么。在网络上到处搜索,首先在 Microsoft.Docs 中搜索,但什么也没有……这是代码:
public static List<Venditori> ElencoVenditori()
{
// Eseguo un ForEach per ciclare dalla lista i miei dati. A differenza del While che cicla un condizionale
// e For che cicla una index, questo comando è dedicato alle liste.
// Associa alla variabile "item", tramite il comando "in", la lista venditori e mostra in console cosa contengono
foreach (var item in Liste.Venditori)
{
Console.Clear();
Console.WriteLine("");
Console.WriteLine($"I Venditori presenti in Lista sono : Nome - {item.NomeVenditore} | GuId - {item.Id}");
Console.WriteLine($" Telefono - {item.TelefonoVenditore} | Mail - {item.EmailVenditore}");
Console.WriteLine($" Venditore Aggiunto il - {item.DateTime}");
Console.WriteLine("");
Console.WriteLine("");
}
return Liste.Venditori;
}
问题 2 我有另一种方法( VerificaListaVenditori() ),它应该显示列表中是否存在一个“Venditore”,使用名称(NomeVenditore)或姓氏(CognomeVenditore)作为搜索索引。在使用任何索引进行搜索时,我检索和异常错误:
Unhandled Exception: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
at System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
at System.String.Format(String format, Object[] args)
at VenditaAutoConcessionarioConsole.Methods.VendorsMethods.VerificaListaVenditori() in C:\Users\Faggiano\source\repos\Progetti\ConcessionarioAuto\ConcessionarioAutoConsole\VenditaAutoConcessionarioConsole\Methods\VendorsMethods.cs:line 168
at VenditaAutoConcessionarioConsole.Methods.ProgramMethods.VendorSelect() in C:\Users\Faggiano\source\repos\Progetti\ConcessionarioAuto\ConcessionarioAutoConsole\VenditaAutoConcessionarioConsole\Methods\ProgramMethods.cs:line 70
at VenditaAutoConcessionarioConsole.Program.Main(String[] args) in C:\Users\Faggiano\source\repos\Progetti\ConcessionarioAuto\ConcessionarioAutoConsole\VenditaAutoConcessionarioConsole\Program.cs:line 53
Premere un tasto per continuare . . .
这是代码:
public static void VerificaListaVenditori()
{
string nomevenditore = "";
string cognomevenditore = "";
Console.Clear();
Console.WriteLine();
Console.WriteLine("----------------------------------------------------------------");
Console.WriteLine("- Inserisci il Nome od il Cognome del Venditore per la ricerca -");
Console.WriteLine("-------------- (Restituisce le Proprietà) ----------------------");
Console.WriteLine("----------------------------------------------------------------");
Console.WriteLine();
nomevenditore = Console.ReadLine();
cognomevenditore = Console.ReadLine();
string risultatoPositivo = "Il Venditore {0} è presente - Avente GuId {1} - " +
" Il Cognome è {2} - Il Telefono è {3} - La Mail è {4}" +
" E' attivo dal {5}";
string risultatoNegativoNome = $"Il Venditore ''{nomevenditore}'' non è presente nella Lista";
string risultatoNegativoCognome = $"Il Venditore ''{cognomevenditore}'' non è presente nella Lista ";
int index = -1;
for (int i = 0; i < Liste.Venditori.Count; i++)
{
if (nomevenditore == Liste.Venditori[i].NomeVenditore | cognomevenditore == Liste.Venditori[i].CognomeVenditore)
{
index = i;
//// Visualizza risultatoPositivo ed interrompe il ciclo
//Console.WriteLine(risultatoPositivo);
}
}
if (index >= 0)
{
Console.Clear();
Console.WriteLine("---------------------------------------------------------");
Console.WriteLine(String.Format(risultatoPositivo, Liste.Venditori[index].NomeVenditore, Liste.Venditori[index].Id, Liste.Venditori[index].CognomeVenditore, Liste.Venditori[index].TelefonoVenditore, Liste.Venditori[index].EmailVenditore));
Console.WriteLine("----------------------------------------------------------");
}
else
{
Console.WriteLine("---------------------------------------------------------");
Console.WriteLine(risultatoNegativoNome, risultatoNegativoCognome);
Console.WriteLine("---------------------------------------------------------");
}
}
完整的代码可以在 GitHub 上找到。
解决方案
如果List.Venditori
是通过索引访问的,那么它必须是 0 到List.Venditori.Count-1
。
所以你的 for 循环必须是
for (int i = 0; i < Liste.Venditori.Count; i++)
{
...
}
推荐阅读
- c# - 标签单击事件以在 C# 中的新线程上运行
- c# - 对齐标签和条目,使条目自动调整宽度并在 xamarin 表单中右对齐
- angular - 无法在 Angular + Karma 中正确测试不属于项目目录的文件
- sql - where 子句中的子查询 - SQL 查询
- git - svn commit -> 推送到 git
- xamarin - Xamarin Forms 将不同字体大小的标签垂直对齐到同一基线
- ldap - Keycloak - 将用户与 LDAP 同步的问题
- android - 如何自定义 Snackbar 中操作按钮的样式
- r - 从 agrep 中提取子字符串匹配
- c# - 为包含不同数量地址的 JSON 文件创建 JSON 模式