是否有一种很好的 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/

10-11 15:21