我正在注册表格中检查上传的图片,我需要使用try catch块。这是我的代码:
public bool CheckFileType(string FileName)
{
string Ext = Path.GetExtension(FileName);
switch (Ext.ToLower())
{
case ".gif":
return true;
break;
case ".JPEG":
return true;
break;
case ".jpg":
return true;
break;
case ".png":
return true;
break;
case ".bmp":
return true;
break;
default:
return false;
break;
}
}
请在这里建议我如何使用try catch块。
提前感谢。
答案 0 :(得分:6)
更好的可以是这样,
public bool CheckFileType(string FileName)
{
bool result = false ;
try
{
string Ext = Path.GetExtension(FileName);
switch (Ext.ToLower())
{
case ".gif":
case ".JPEG":
case ".jpg":
case ".png":
case ".bmp":
result = true;
break;
}
}catch(Exception e)
{
// Log exception
}
return result;
}
答案 1 :(得分:5)
有很多方法可以在返回值的方法中使用异常:
将您的return语句放在try-catch之外例如:
T returnValue = default(T);
try
{
// My code
}
catch
{
// Exception handling code
}
return returnValue;
在您的捕获中放入一个return语句
try
{
// My code
}
catch
{
// Handle exception
return default(T);
}
抛出异常
你没有拥有来返回一个值,该方法只需要结束(例如,达到return语句或throw语句)。根据异常情况,返回值并不总是有效。
您应该仔细考虑何时以及如何捕获和处理异常:
在你的情况下:
string Ext = Path.GetExtension(FileName);
,如果FileName
包含GetExtension
,则根据documentation可能会失败。 (请注意,即使FileName
为空,public bool CheckFileType(string FileName)
{
string Ext;
try
{
Ext = Path.GetExtension(FileName);
}
catch (ArgumentException ex)
{
return false;
}
// Switch statement
}
也不会返回null。所以我可能会处理这样的异常:
ArgumentException
请注意,我们只捕获我们期望的异常(try
),并且我们只将FileName
语句放在我们期望抛出异常的语句周围。
事实上,尽可能避免抛出和捕获异常是一个好主意 - 它们不仅会导致性能损失(如果在循环中调用此方法会导致严重问题),但是您可能会无意中捕获并处理异常你没有预料到的例外,掩盖了一个更严重的问题。
在这种情况下,我们可以通过检查自己以查看public bool CheckFileType(string FileName)
{
if (FileName == null)
{
return false;
}
if (FileName.IndexOfAny(System.IO.Path.GetInvalidPathChars()) >= 0)
{
return false;
}
// Your original method goes here
}
是否包含任何无效字符来避免完全抛出异常:
{{1}}
答案 2 :(得分:2)
由于你实际上没有测试文件类型(只是文件名的扩展名),我首先要重新命名方法。您可以使用扩展方法来处理它:
public static bool HasImageExtension(this string fileName)
{
try
{
if (fileName == null) return false;
string[] validExtensions = new string[] { ".gif", ".jpg", ".jpeg", ".png", ".bmp" };
string extension = Path.GetExtension(fileName);
return validExtensions.Contains(extension);
}
// catch the specific exception thrown if there are
// invalid characters in the path
catch (ArgumentException ex)
{
// do whatever you need to do to handle
// the fact there are invalid chars
throw;
}
}
然后你可以这样打电话:
string fileName = "testFileName.jpg";
bool hasImageExtension = fileName.HasImageExtension();
答案 3 :(得分:0)
这应该有效:
public bool CheckFileType(string FileName)
{
try
{
string Ext = Path.GetExtension(FileName).ToLower();
string[] okExt = ".gif|.jpg|.jpeg|.png|.bmp".Split('|');
foreach(var item in okExt)
{
if(Ext == item)
return true;
}
return false;
}
catch(Exception ex)
{
throw;
}
}
请记住:永远不会捕获您不会处理的异常。(或至少重新抛出它们)