我在C#MVC4应用程序中有一个Form Collection。在此集合的index[0]
中,有一个字符串,其格式始终为"10=on&13=on&15=on"
;唯一的区别是字符串中#=on
的数量。
我想从此字符串中提取每个数字并将它们添加到整数列表中。这样做最简单的方法是什么?是否需要Regex?
答案 0 :(得分:3)
这样做最简单的方法是什么?
我会使用自定义模型绑定器:
public class MyModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var request = controllerContext.RequestContext.HttpContext.Request.Params;
var keys =
from key in request.Keys.Cast<string>()
where request[key] == "on"
select key;
var onValues = new List<int>();
foreach (var key in keys)
{
int value;
if (int.TryParse(key, out value))
{
onValues.Add(value);
}
}
return onValues.ToArray();
}
}
然后像这样的控制器动作:
public ActionResult SomeAction([ModelBinder(typeof(MyModelBinder))]int[] values)
{
return View();
}
现在您只需将以下请求发送到此控制器操作,自定义模型绑定器即可完成此任务:
/SomeAction?10=on&13=on&15=on
是否需要Regex?
Nooooooooooooooooooooo。
答案 1 :(得分:2)
var nums = Regex.Matches(input, @"\d+").Cast<Match>().Select(m => m.Value)
.ToList();
答案 2 :(得分:0)
有问题的字符串看起来像一个查询字符串,因此一种方法是使用System.Web.HttpUtility.ParseQueryString()
从字符串中获取NameValueCollection
。然后枚举键并解析它们以获得整数。
var collection = System.Web.HttpUtility.ParseQueryString("10=on&13=on&15=on");
foreach (var key in collection.Keys.Cast<string>())
{
int i;
if (int.TryParse(key, out i))
{
// add i to list of ints
}
}