gpt4 book ai didi

c# - 检查字符串列表是否包含任何枚举字符串值

转载 作者:行者123 更新时间:2023-11-30 20:48:43 24 4
gpt4 key购买 nike

enum KnownError
{
[StringValue("CODE-001")]
CODE001,
[StringValue("CODE-002")]
CODE002,
[StringValue("CODE-003")]
CODE003,
[StringValue("CODE-004")]
CODE004,
[StringValue("CODE-005")]
CODE005
}

List<string> errors = {"ahah", "eheh", "CODE-005", "uhuh"};

假设我有一个字符串错误列表。如何检查是否有“已知”错误?

bool ContainsKnownError(List<string> error)
{
return errors.Where(error => Enum.IsDefined(typeof(KnownError), error) == true).Count() > 0;
}

这似乎行不通。如何在 linq 查询中访问 StringValue 而不必比较每个字符串?

编辑

我尝试了@AK_ 解决方案,使用 Intersect,但我遇到了这个编译错误:

The type arguments for method 'System.Linq.Enumerable.Intersect<TSource>(System.Collections.Generic.IEnumerable<TSource>, System.Collections.Generic.IEnumerable<TSource>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

真实场景是一个带有字符串字段的错误对象,代码如下

class Error { string code; }

List<Error> errors = GetErrors();
var knownErrors = Enum.GetValues(typeof(KnownError));
bool exists = errors.Select(error => error.code).Intersect(knownErrors).Any();

最佳答案

var knownErrors = Enum.GetValues(typeof(KnownError));

return errors.Contains(error => knownErrors.Contains(error));
//or cooler:
return errors.Intersect(knownErrors).Count() > 0;

Zack 的评论是正确的:return errors.Intersect(knownErrors).Any 更好...+1 他:-)

关于c# - 检查字符串列表是否包含任何枚举字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24292033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com