Lambda表达式在对象列表中不起作用

时间:2016-06-10 11:22:06

标签: c# list object lambda generic-list

我有一个对象列表,我可以用该句子添加记录:

jQuery(document).ready(function(){
  $("#PROV_ID").change(function() {
    var PROVID = {"PROVID" : $('#PROV_ID').val()};
    console.log(PROVID);

    $.ajax({
      type: "POST",
      data: PROVID,
      url: "<?php base_url(); ?>Employees/dependent_dropdown/",

      success: function(data){
          var select = $('#CT_ID');
          select.html('');
          $.each(data, function(i, option){
              select.append("<option value='"+option.CT_ID+"'>"+option.CITY+"</option>");
          });
      }
     });
   });
  $("#PROV_ID2").change(function() {
    var PROVID2 = {"PROVID2" : $('#PROV_ID2').val()};
    console.log(PROVID2);

    $.ajax({
      type: "POST",
      data: PROVID2,
      url: "<?php base_url(); ?>Employees/dependent_dropdown2/",

      success: function(data){
          var select = $('#CT_ID2');
          select.html('');
          $.each(data, function(i2, option2){
              select.append("<option value='"+option2.CT_ID+"'>"+option2.CITY+"</option>");
          });
      }
     });
   });
 });

但是当我尝试删除一个项目时,它表现得像lambda表达式不支持:

List<DragerClass.Alarm> alarms = new List<DragerClass.Alarm>();
public void createAlarm(int i, int[] alarms)
{
    alarms.Add(new DragerClass.Alarm(i, DateTime.Now, DragerClass.Dedector.Dedector_Name[i] + " UNDER RANGE"))`;
}

当我站在代码上时,我看到了这条消息

  

无法将lambda表达式转换为type   &#39; Drager_GasDedection.DragerClass.Alarm&#39;因为它不是代表   型

我使用的是Visual Studio 2010,我还在引用中添加了public void removeAlarm(int i) { alarms.Remove(x => x.Dedector_No == i); } 。但仍然相同。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

看看methods of List<T>。方法Remove(T)只需要一个元素。如果在列表中找到它,则将其删除,否则不执行任何操作。 Remove并未寻找会检查的Predicate<T>

RemoveAll(Predicate<T>)但是期望一个谓词。所以你需要打电话:

alarms.RemoveAll(x => x.Dedector_No == i);

您还必须在代码中将=更改为==,否则您将执行分配而不是相等检查。此外请注意,该方法将使用给定的检测器编号删除所有警报,而不仅仅是第一个。