微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LINQ任何运行方法

如何解决LINQ任何运行方法

我下面有这个代码

string[] hexSignatureList = {"AA-BB","XX-YY"};

foreach (var hexSignature in hexSignatureList)
{
    if (IsValidMimeType(hexSignature))
        throw new ArgumentException("Invalid.");
}

如何将以上代码转换为LINQ .Any语法?

解决方法

不管看起来好像是在抛出 valid mimeTypes的事实,也许是拼写错误?我假设你知道自己在做什么。

解决方案应该简单到只使用AnyFunc<TSource,bool>谓词,然后在true上使用 throwing :>

确定序列的任何元素是否满足条件

谓词

Func<TSource,Boolean>

用于测试每个元素的条件的函数。

示例

if(hexSignatureList.Any(x => IsValidMimeType(x)))
    throw new ArgumentException("Invalid.");

或用作方法组

if(hexSignatureList.Any(IsValidMimeType))
    throw new ArgumentException("Invalid.");

或者在您的原始代码不正确的情况下,并且您想针对有效的mime类型列表进行验证。您可以使用All

确定序列的所有元素是否满足条件。

if(!hexSignatureList.All(IsValidMimeType))
    throw new ArgumentException("Invalid.");

注意:以这种方式进行投掷意味着您松开了为什么无效的上下文。

另一种方法(虽然更冗长)是使用Where,因此您可以在异常中更明确地包括验证失败:

var invalidTypes = hexSignatureList
   .Where(x => IsValidMimeType(x)) // .Where(x => !IsValidMimeType(x))
   .ToList();

if(invalidTypes.Any())
    throw new ArgumentException($"Invalid types,{string.Join(",",invalidTypes)}");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。