所以我有这样的方法:完成的方法与抛出异常,而不是返回
public string SaveImage(AppConfig imagePath, string ImageNameFilter)
{
if (selectedFileName == null)
{
return null;//No image is selected - return
}
string imgPath = imagePath.ConfigValue.ToString();
string baseFileName = Path.GetFileNameWithoutExtension(selectedFileName);
string extension = Path.GetExtension(selectedFileName);
string temp = Path.GetFileNameWithoutExtension(selectedFileName);
if (!baseFileName.StartsWith(ImageNameFilter))
{
throw new InvalidImageException("The image name must starts with " + ImageNameFilter);
}
else
{
for (int i = 1; i < (int.MaxValue - 1); i++)
{
if (File.Exists(imgPath + "\\" + baseFileName + extension))
{
baseFileName = temp;
}
else
{
File.Copy(selectedFile, imgPath + "\\" + baseFileName + extension);
return (baseFileName + extension);
}
baseFileName += (i).ToString();
}
}
//throw new InvalidImageException("The Image was not saved");
return null;//Should never come here - something went wrong
}
的问题是,该方法是等待在,即使我想我处理所有可能的结果结束的回报。现在我明白了,其实for (int i = 1; i < (int.MaxValue - 1); i++)
是一种可能的(即使只是理论的方式)的方式到达终点,也许还有更多的情况下,将导致返回任何结果之前到达方法的结束。然而,编译器会抱怨,如果没有return
,但另一方面,如果代码到达方法的末尾,这意味着出现了问题,我希望能够正确处理这个问题。在开始时在本次检查
我的用户null
:
if (selectedFileName == null)
{
return null;//No image is selected - return
}
而且由于TI的绝对确定没有图像选择,我认为,我应该回到null
结果的地方是这样的。其余的结果没有任何选择 - 当没有执行任何内容时,我会到达方法的结尾。正如我发布的return null;
,但我需要改变它。我需要知道这种确切的情况正在发生,我需要做出相应的反应。
有,我能想到现在两个选择 - 返回一些字符串我检查或抛出异常。但我不确定 - 是否抛出异常而不是使用标准的return
声明来完成方法。你认为处理这种情况的正确方法是什么?
根据您的代码:如果每个建议的文件存在,比它不会返回任何东西。如果你是i> int.MaxValue,你可以抛出一个异常,因为超过2,147,483,646个同名的文件对我来说看起来是个例外。 – Silvermind 2013-03-01 11:50:59