无法在数组中搜索最大值
Posted
技术标签:
【中文标题】无法在数组中搜索最大值【英文标题】:Can't search for the max value into an array 【发布时间】: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。
总是喜欢 Listvar yourlist = new List<ClienteModel>(); .... yourlist .Add(someClienteModel);
下面的代码不能实现你想要做的吗?
ClienteModel[] MemoryClienti = new ClienteModel[19];
OrdineModel[] MemoryOrdini = new OrdineModel[19];
int maxID = 0; /* 0 is not a valid ID. IDs start from 1 */
//Aggiungi
public bool CreateCliente(ClienteModel model)
if(maxID <= MemoryClienti.Length)
MemoryClienti[maxID++] = model; // copy the reference
model.IDCliente = maxID; // update the object's ID
return true;
else
return false; // can't add. array is full
如果您还要进行删除,最好按照其他人的建议使用列表。
【讨论】:
似乎可以正常工作,但是当您插入第二个元素时,第一个元素会被第二个元素替换......我不知道为什么,list.add 也会发生。以上是关于无法在数组中搜索最大值的主要内容,如果未能解决你的问题,请参考以下文章