我的代码中有这一行:
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”?)
答案 0 :(得分:9)
与目前为止的其他答案不同,我可能会坚持EndsWith
,但切换到接受overload参数的StringComparison
,例如:
address.EndsWith("GIF",StringComparison.OrdinalIgnoreCase)
您通常避免使用ToLower
或ToUpper
只是为了能够执行比较,因为框架中的大多数字符串比较工具都提供某种形式的选项允许你在忽略案件时进行比较。
答案 1 :(得分: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)))
答案 2 :(得分: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将被视为有效地址。
答案 3 :(得分: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;
}
答案 4 :(得分:0)
在评估之前,只需将所有扩展名更改为大写,就像这样
address.ToUpper().EndsWith("GIF") etc.
检查点,例如“.GIF”会让你更加确信它实际上是一个扩展,而不是一个以GIF结尾的扩展文件。