简化了c#indexof条件中的许多可能性

本文关键字:许多 可能性 条件 c#indexof | 更新日期: 2023-09-27 17:57:58

有什么方法可以简化这段代码吗?输入是一个字符串。

private string IfItIsPicture(string URI_obrazku)
    {
        if (URI_obrazku.IndexOf(".jpg") > -1 || 
            URI_obrazku.IndexOf(".png") > -1 || 
            URI_obrazku.IndexOf(".bmp") > -1 ||
            URI_obrazku.IndexOf(".tiff") > -1 || 
            URI_obrazku.IndexOf(".tif") > -1 || 
            URI_obrazku.IndexOf(".jpeg") > -1 || 
            URI_obrazku.IndexOf(".jpg") > -1 || 
            URI_obrazku.IndexOf(".svg") > -1 || 
            URI_obrazku.IndexOf(".gif") > -1)
            { ... some code }
        return someString;
    }

谢谢。

简化了c#indexof条件中的许多可能性

使用Path.GetExtension只获取扩展。然后检查该扩展是否在已知扩展的集合中。

private string IfItIsPicture(string URI_obrazku)
{
    var knownExtensions = new [] { ".jpg",".png",".bmp", "..."};
    var extension = Path.GetExtension(URI_obrazku);
    if (knownExtensions.Contains(extension, StringComparer.OrdinalIgnoreCase))
    {
        // ... some code
    }
    return "someString";
}

使用Linq:

var types = new List<string> { ".jpg", ".png", ... };
if (types.Any(t => URI_obrazku.IndexOf(t) >= 0))
{
     return someString;
}

是,使用数组

var values = new [] { ".jpg",".png",".bmp", ...};
if(values.Any(x => URI_obrazku.EndsWith(x)))

我不知道这是否更好,但我敢打赌它更快,因为它没有执行多个IndexOf:

private bool IsPicture(string URI_obrazku)
{
    String Extension = Path.GetExtension(URI_obrazku);
    switch (Extension)
    {
        case ".jpg": return true;
        case ".png": return true;
        // other extensions
        default: return false;
    }
}