【发布时间】:2020-12-14 10:12:17
【问题描述】:
我的问题是我无法使用 linq 搜索数组以查找对象属性并将其设置为 id。
我需要在数组中搜索其他 model.idCliente 并将该值设置为“nextid + 1”的方法,以便将其用作 id 和下一个数组索引。
由于数组为空,程序正确添加了新对象,但是当进入 else if 情况时,我得到一个“a as null”的异常。
这是我的代码(如果 linq 行说“a”为空,我在 else 中得到一个异常):
//Arrays
ClienteModel[] MemoryClienti = new ClienteModel[19];
OrdineModel[] MemoryOrdini = new OrdineModel[19];
//Aggiungi
public bool CreateCliente(ClienteModel model)
{
if (MemoryClienti[0] == null)
{
int defaultID = 0;
int defaultIndex = 0;
model.IDCliente = defaultID;
MemoryClienti[defaultIndex] = model;
}
else if (MemoryClienti[0]!=null)
{
var maxID = MemoryClienti.Max(a => a.IDCliente);
model.IDCliente = maxID++;
MemoryClienti[maxID++] = model;
}
return true;
}
这是点击表单的代码:
//Aggiungi Cliente
private void aggiungiClienteButton_Click(object sender, EventArgs e)
{
clienteModel.Cognome = cognomeTextBox.Text;
clienteModel.Nome = nomeTextBox.Text;
clienteModel.Indirizzo = indirizzoTextbox.Text;
dbMemoryManager.CreateCliente(clienteModel);
MessageBox.Show("Cliente aggiunto correttamente.");
cognomeTextBox.Text = String.Empty;
nomeTextBox.Text = String.Empty;
indirizzoTextbox.Text = String.Empty;
}
这是ClienteModel 类:
public class ClienteModel
{
public int IDCliente { get; set; }
public string Cognome { get; set; }
public string Nome { get; set; }
public string Indirizzo { get; set; }
}
【问题讨论】:
-
当您创建数组时,它会填充类型的默认值 (
ClienteModel)。假设这是一个类,数组中的默认值是一个空引用。即使您在数组的零槽中有一个条目,其他槽也是空的。因此,当您运行该代码时,除一个之外的每个插槽都是空的,因此a.IDCliente将失败。考虑使用List<ClienteModel>而不是数组 - 这里更有意义 -
有趣,所以(理论上)应该填充整个数组?我应该如何使用列表?我尝试使用 list.add 但每次它都会覆盖前一个对象。例如:[0] a b c,当我输入时添加从文本框和方法创建的另一个对象 (d e f),我有 [0] d e f, [1] d e f。
-
总是喜欢 List
而不是数组: var yourlist = new List<ClienteModel>(); .... yourlist .Add(someClienteModel); -
正如我所说,使用 .add 方法,列表被最新的对象覆盖,所以我有 2 个相同的对象。
标签: c# arrays algorithm class methods