简化c#indexof condition中的许多可能性

时间:2014-04-12 14:54:15

标签: c#

有没有办法简化这段代码?输入是一个字符串。

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;
    }

感谢。

4 个答案:

答案 0 :(得分:2)

使用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";
}

答案 1 :(得分:1)

使用Linq:

var types = new List<string> { ".jpg", ".png", ... };

if (types.Any(t => URI_obrazku.IndexOf(t) >= 0))
{
     return someString;
}

答案 2 :(得分:0)

是的,使用数组

var values = new [] { ".jpg",".png",".bmp", ...};

if(values.Any(x => URI_obrazku.EndsWith(x)))

答案 3 :(得分:0)

我不知道这是否更好,但我打赌它更快,因为它没有做多个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;
    }
}
相关问题