所以我有这个方法:
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语句来完成方法的正确方法。您认为处理此案的正确方法是什么?