如何从强 c# 对象返回 list<string>,其中对象属性中的任何项都包含指定的字符串 [duplicate]

How do you return a list<string> from a strong c# object where any items in the object's property contains the specified string [duplicate]

提问人:Mike Johnston 提问时间:11/2/2023 最后编辑:Mike Johnston 更新时间:11/2/2023 访问量:61

问:

我有 2 个对象

public class Root
{
    public Value value { get; set; }
}

public class Value
{
    public List<string> names { get; set; }
}

我有一个json字符串

{
 "value": {
  "names": [
   "MINChanges_231101123225.xls",
   "MultiTierContractTemplate.xlsx"
           ]
          }
}

我反序列化

Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonString);

我想返回一个列表字符串,其中任何名称都包含我指定的字符串

我知道如何使用 Contains 函数,如下所示,但是如何使用 Linq 向我返回一个新的列表字符串,其中任何名称都包含我指定的字符串

myDeserializedClass.value.names.Any(str => str.Contains(mySpecifiedString))
C# JSON .NET LINQ

评论

0赞 Tim Schmelter 11/2/2023
为什么你把它声明为好像它是一个?IEnumerable<dynamic>List<string>
0赞 Servy 11/2/2023
如果您想要字符串包含另一个字符串的字符串,为什么要调用?Any
0赞 Mike Johnston 11/2/2023
@TimSchmelter 那是个错误。我更新了问题
0赞 Franz Gleichmann 11/2/2023
不如不使用 ,如果集合的任何部分满足您的条件,则返回 ,而使用 ,则返回集合中满足条件的所有项目?另外:您的问题是关于过滤反序列化数据的。首先,它是从 JSON 反序列化的,这是非常无关紧要的 - 例如,您的问题与 XML 相同。可能看起来很挑剔,但对于一个好的开发人员来说,找出你的实际问题是一项至关重要的技能。.Any().Where()

答:

0赞 Tim Schmelter 11/2/2023 #1

我想从downloadedFilesNames返回一个列表字符串,其中任何 downloadedFilesNames 中的项目包含我指定的字符串

如果你真的想要,你为什么要使用?你不想知道是否至少有一个匹配项,但你想找到它们,所以筛选列表:myDeserializedClass.value.names.AnyWhere

List<string> filterFileNames = myDeserializedClass.value.names
    .Where(fn => fn.Contains(mySpecifiedString))
    .ToList();

评论

0赞 Mike Johnston 11/2/2023
是的,这奏效了。谢谢。但是,我更新了问题(删除了属性 downloadedFilesNames),因此您可能需要编辑答案以反映更改
0赞 Mike Johnston 11/2/2023
我将其标记为答案,但是,您仍然提到了 downloadedFilesNames。您可能应该删除这些提及
0赞 Tim Schmelter 11/2/2023
@MikeJohnston:你是对的,删除了它