3

我的代码中有这一行:

if (address.EndsWith("GIF") || (address.EndsWith("BMP") || address.EndsWith("JPEG") || address.EndsWith("TIFF") || address.EndsWith("RAW") || address.EndsWith("PNG")))

例如现在地址变量中的网站地址是:www.test.jpg 那么它永远不会进入IF并跳出/继续。

我希望它在所有扩展名中都大写和小写,例如“GIF”和“gif”我该怎么做?

(子问题如果我想检查文件扩展名 EndsWith("gif" 就足够了,或者我必须在它之前添加一个点,比如 ".gif" 或 ".jpeg" ?)

4

5 回答 5

11

与迄今为止的其他答案不同,我可能会坚持EndsWith但切换到接受参数的重载StringComparison,例如:

address.EndsWith("GIF",StringComparison.OrdinalIgnoreCase)

您通常应该避免使用ToLowerToUpper仅仅为了能够执行比较,因为框架中的大多数字符串比较工具都提供了某种形式的选项,允许您在忽略大小写的情况下执行比较。

于 2013-08-29T06:39:08.553 回答
3

你根本不需要

 address.ToLower().EndsWith("gif")

如果你真的需要

 bool lowercase = address.ToLower() == address

您也可以清理您的代码 - 我相信您应该将 Damien 的答案纳入其中,但不想从应得的地方拿走功劳。

var extensions = new string[]{"gif","jpg","something"};
if(extensions.Any(x => address.ToLower().EndsWith(x)))
于 2013-08-29T06:35:41.867 回答
3

对于小写,您应该只转换为小写,然后匹配结尾。

像这样做

string temp = address.ToLower(); 
if (temp .EndsWith(".gif") || (temp .EndsWith(".bmp") || temp .EndsWith(".jpeg") || temp .EndsWith(".tiff") || temp .EndsWith(".raw") || temp .EndsWith(".png")))

对于您的子问题

您需要添加.扩展名。因为否则您的地址 www.testgif 将被视为有效地址。

于 2013-08-29T06:36:18.487 回答
1

Path.GetExtension使用方法获取扩展。

返回指定路径字符串的扩展名。

string ext = Path.GetExtension(address);

然后检查扩展名中的所有字符是否为大写。

public static bool IsAllCharLowerCase(string ext)
{
    foreach(char c in ext)
    {
         if (char.IsUpper(c))
         {
             return false;
         }
    }
    return true;
}
于 2013-08-29T06:36:04.480 回答
0

只需在评估它们之前将所有扩展名更改为大写,就像这样

address.ToUpper().EndsWith("GIF") etc.

用“.GIF”之类的点检查会让你更确定它实际上是一个扩展名,而不是一个以 GIF 结尾的无扩展名文件。

于 2013-08-29T06:38:41.320 回答