是否有一种很好的 linqy 方法可以将 FormCollection
拆分为仅包含以某个字符串开头的那些键的 Dictionary<string,string>
?
(这个问题与 this-> 基本相同,但对于 C#/FormCollection 而不是 python Slicing a dictionary by keys that start with a certain string )
这是我想出的解决问题的方法:
public ActionResult Save(FormCollection formCollection) {
var appSettings = new Dictionary<string, string>();
var appKeys = formCollection.AllKeys.Where(k => k.StartsWith("AppSettings."));
foreach (var key in appKeys)
{
appSettings[key] = formCollection[key];
}
...
编辑:此代码的问题在于,我必须为不同的 StartsWith 字符串多次执行此操作,因此需要创建一个“实用程序”方法来执行上述操作。
如果可以像这样一行阅读,那就太好了:
formCollection.Where(k=>k.Key.StartsWith("AppSettings.");
背景(不是解决问题所必需的): 上下文是asp.net mvc,是一个带有动态字段字典的表单。
它也类似于这个问题 - Return FormCollection items with Prefix - 但不完全相同。
并阅读了这个答案 How to build C# object from a FormCollection with complex keys - 我开始怀疑我是否甚至不使用表单发布会更好,而是发送 JSON。
最佳答案
如果您正在寻找一种“不错”的方式来获取现有字典,生成一个带有键+值副本的新字典,对于键的子集,一些 LINQ 代码可以很好地做到这一点:
var appSettings = formCollection.AllKeys
.Where(k => k.StartsWith("AppSettings."))
.ToDictionary(k => k, k => formCollection[k]);
关于c# - 通过以特定字符串开头的键对 FormCollection 进行切片,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4893147/