所以我有這樣的方法:完成的方法與拋出異常,而不是返回
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