C# 用于删除非数字项的筛选器列表

C# 用于删除非数字项的筛选器列表,c#,asp.net-mvc,C#,Asp.net Mvc,我正在使用以下控制器方法获取Grid.Mvc中所有选定项的id,但是我注意到,我不仅获取选定项的id,而且获取每行的false,这显然是我不想要的 我将以下代码组合在一起,只留下id,这样我就可以做我的事情了。但是,有没有更好的方法来做到这一点,至少有没有一种方法可以过滤掉非数字列表项,而不是我现有的硬编码真/假的方法: //POST [HttpPost] [ActionName("Index")] public ActionResult IndexPost(FormCollection col

我正在使用以下控制器方法获取Grid.Mvc中所有选定项的id,但是我注意到,我不仅获取选定项的id,而且获取每行的false,这显然是我不想要的

我将以下代码组合在一起,只留下id,这样我就可以做我的事情了。但是,有没有更好的方法来做到这一点,至少有没有一种方法可以过滤掉非数字列表项,而不是我现有的硬编码真/假的方法:

//POST
[HttpPost]
[ActionName("Index")]
public ActionResult IndexPost(FormCollection collection)
{
    var selectedIds = collection.GetValues("selectedAddressesIds");
    List<string> myList = new List<string>();

    myList = selectedIds.ToList();
    myList.RemoveAll(x => (x == "false") || (x == "true")); 

    if (myList != null )
    {
        foreach (var id in myList)
        {
            // do what you want with the selected id.
        }
    }  

    return View();
}

要回答有关筛选的问题,可以使用以下选项之一检索数值:

var exampleList = new List<string>{"1", "2", "rubbish", "3", "trash", "4.5"};

int dummyInt; // just because you need an out param of type int

// filteredInts will contain {1, 2, 3}
var filteredInts = exampleList.Where(item => int.TryParse(item, out dummyInt));

double dummyDouble; // just because you need an out param of type double

// filteredDoubles will contain {1, 2, 3, 4.5}
var filterdDoubles = exampleList.Where(item => double.TryParse(item, out dummyDouble));

要回答有关筛选的问题,可以使用以下选项之一检索数值:

var exampleList = new List<string>{"1", "2", "rubbish", "3", "trash", "4.5"};

int dummyInt; // just because you need an out param of type int

// filteredInts will contain {1, 2, 3}
var filteredInts = exampleList.Where(item => int.TryParse(item, out dummyInt));

double dummyDouble; // just because you need an out param of type double

// filteredDoubles will contain {1, 2, 3, 4.5}
var filterdDoubles = exampleList.Where(item => double.TryParse(item, out dummyDouble));

如果GetValuesSelectedAddressSids方法返回的不是所选地址的ID,那么您应该解决这个问题,而不是调整结果列表

在没有看到结果来自何处的情况下,我不知道为什么在这个列表中有true和false的值,但是如果每个条目都有true和false,那么如果查看SelectedAddressSids集合的填充位置,应该不难找到

不过,为了更直接地回答标题问题,如果您只是想避免硬编码true和false,您可以尝试解析为int,并放弃任何不解析的内容:

List<string> myList = new List<string>();
int dummy;  // because TryParse takes an out parameter
myList.RemoveAll(x => !int.TryParse(x, out dummy));

但是,我鼓励您找出无效值的根本原因

如果GetValuesSelectedAddressSids方法返回的不是所选地址的ID,那么您应该解决这个问题,而不是调整结果列表

在没有看到结果来自何处的情况下,我不知道为什么在这个列表中有true和false的值,但是如果每个条目都有true和false,那么如果查看SelectedAddressSids集合的填充位置,应该不难找到

不过,为了更直接地回答标题问题,如果您只是想避免硬编码true和false,您可以尝试解析为int,并放弃任何不解析的内容:

List<string> myList = new List<string>();
int dummy;  // because TryParse takes an out parameter
myList.RemoveAll(x => !int.TryParse(x, out dummy));

但是,我鼓励您找出无效值的根本原因

我能闻到一些东西。@inventanimate我注意到我不仅得到了所选项目的id,而且还得到了每一行的false,这显然是我不想要的。指示代码未按预期工作,这使其脱离了代码主题Review@SimonAndréForsberg我只是没有把它作为这条线索的要点来读。最好的猜测是你使用CheckBoxFor,它生成一个关联的隐藏输入,值为False,这样你就可以绑定到你的模型,因为未选中的框不会发布值,但是您使用FormCollection为什么要使用它而不是绑定到您的模型?因为我使用的是Grid.Mvc,绑定一个模型似乎很困难,因为复选框的状态我能闻到一些东西。@Invent Animate我注意到我不仅得到了所选项的id,而且得到了每一行的false,这显然是我不想要的。指示代码未按预期工作,这使其脱离了代码主题Review@SimonAndréForsberg我只是没有把它作为这条线索的要点来读。最好的猜测是你使用CheckBoxFor,它生成一个关联的隐藏输入,值为False,这样你就可以绑定到你的模型,因为未选中的框不会发布值,但是您使用FormCollection为什么要使用它而不是绑定到您的模型?因为我使用Grid.Mvc,绑定一个模型似乎很困难,因为复选框的状态我理解您的观点,因为现在这将是一个TODO,因为我有许多更紧迫的事情要完成,我知道这不是最终的解决方案,是一个“黑客”,但现在必须这样做。我理解你的观点,因为现在这将是一个TODO,因为我有一些更紧迫的事情要完成,我知道这不是最终的解决方案,是一个“黑客”,但现在必须这样做。