C# 修改列表中的对象

C# 修改列表中的对象,c#,list,C#,List,如何修改列表中不知道索引是什么的对象?关于修改对象,我发现的一切都是当您知道要更改的索引时。因此,在下面的代码中,它将用新的ServiceRequest“r”替换索引0处的ServiceRequest(至少我认为会)。但是,如果您不确定用户将选择更改什么索引,该怎么办 public class ManagementSystem { List<ServiceRequest> Requests = new List<ServiceRequest>(); pub

如何修改列表中不知道索引是什么的对象?关于修改对象,我发现的一切都是当您知道要更改的索引时。因此,在下面的代码中,它将用新的ServiceRequest“r”替换索引0处的ServiceRequest(至少我认为会)。但是,如果您不确定用户将选择更改什么索引,该怎么办

public class ManagementSystem
{

   List<ServiceRequest> Requests = new List<ServiceRequest>();

   public void CreateRequest(ServiceRequest r)
   {           
       Requests.Add(r);          
   }

    public void DeleteRequest(ServiceRequest r)
    {            
        Requests.Remove(r);
    }

    public void ModifyRequest(ServiceRequest r)
    {            
        Requests[0] = r;

    }                    

}
公共班级管理系统
{
列表请求=新列表();
公共无效CreateRequest(ServiceRequest r)
{           
请求。添加(r);
}
公共无效删除请求(ServiceRequestr)
{            
请求。删除(r);
}
公共无效修改请求(ServiceRequestr)
{            
请求[0]=r;
}                    
}

您应该能够使用:

Requests.IndexOf(r) //r being the object you want to modify

要获得要修改的对象的索引,然后从中计算出其余的索引

如果要更新
列表中的项目
,首先必须找到该项目和列表,然后替换

例如:

public void ModifyRequest(ServiceRequest r)
{
    var req = Requests.FirstOrDefault(rs => rs.SomeProperty.Equals(r.SomeProperty));
    if (req != null)
    {
        var idx = Requests.IndexOf(req);
        Requests[idx] = r;
    }
}
这里,我假设
Request
类有一个属性
SomeProperty
,在此基础上,您将在列表中找到一个匹配的
Request
对象

注意

var index = Requests.IndexOf(r);

仅当列表中的项目与
r
的对象相同时,才会给出非负(有效)索引。它们必须具有相同的引用才能工作。

您可以使用
请求。IndexOf(r)
获取索引。请注意,
.IndexOf
将找到相同的项。默认情况下,这是具有相同引用的项。同时,如果你有一个对象的引用,你可以不用这个方法修改它。@Alex哦,不,你已经有一个引用了。此外,您不能对引用类型使用
ref
。描述你期望的行为。这个
ModifyRequest
应该做什么?@YeldarKurmangaliyev有一个方法可以创建一个ServiceRequest并将其添加到列表中。此ServiceRequest有3个参数:名称、ID号和描述。我将所有3个参数都作为字符串。ModifyRequest允许用户更改一个或多个参数(如果需要)。@Alex允许用户更改一个或多个参数。您将如何确定要修改的请求?凭身份证?如果是,则Arghya C的回答是正确的。