筛选列表以删除非数字项

时间:2015-04-10 12:21:57

标签: c# asp.net-mvc

我正在使用以下控制器方法来获取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();
}

2 个答案:

答案 0 :(得分:3)

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

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));

当然,如果您只想过滤原始列表,可以使用RemoveAll()的补充逻辑:

// If you only want int values:
myList.RemoveAll(item => ! int.TryParse(item, out dummyDouble));

// ..or want to also keep double values:
myList.RemoveAll(item => ! double.TryParse(item, out dummyDouble));

答案 1 :(得分:3)

如果GetValues(&#34; selectedAddressesIds&#34;)方法返回的内容不是所选地址的ID,那么就应该修复这个问题,而不是调整结果列表。

没有看到结果来自哪里我不确定为什么你有&#34; true&#34;和&#34;假&#34;在此列表中,但如果它适用于每个条目,那么如果您查看selectedAddressesIds集合的填充位置,则不应该太难找到。

更直接地回答标题问题,如果你只是想避免硬编码&#34; true&#34;和&#34;假&#34;您可以尝试解析为int并丢弃任何不解析的内容:

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

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