无法使用for/if组合返回正确的int函数值
本文关键字:int 函数 返回 组合 for if | 更新日期: 2023-09-27 18:15:59
我有一个函数,它只需要返回List<Bitmap>
中称为images
的图片框中当前显示的图像的索引。它是一个名为displayImageIndex()
的int
函数,我最初尝试这样运行它:
public int displayImageIndex()
{
//index to return to function
int displayIndex = 0;
//access all images in list
for (int i = 0; i < imagePaths.Count; ++i)
{
//matches image in picturebox
if (picboxImage.ImageLocation == imagePaths[i])
{
//get index of image
displayIndex = imagePaths.IndexOf(imagePaths[i]);
}
}
return displayIndex;
}
这已编译,但总是返回displayIndex为0,尽管图像显然是在程序的其余部分工作时被找到的。然后我尝试这样做:
public int displayImageIndex()
{
//value to return to function
int displayIndex;
//access all images in list
for (int i = 0; i < imagePaths.Count; ++i)
{
//matches image in picturebox
if (picboxImage.ImageLocation == imagePaths[i])
{
//get index of image
displayIndex = imagePaths.IndexOf(imagePaths[i]);
return displayIndex;
}
}
}
这给了我一个错误,告诉我'不是所有的代码路径返回值'。我试图通过在if
语句中添加else
来解决这个问题,但是这给了我一个警告,循环可能包含不可访问的代码。
基本上,无论我如何尝试运行它,我都会得到某种错误。我不知道该怎么做,因为函数绝对总是会找到一个值(picbox上的图像将始终是images
列表中的一个),我只需要一个有效的方法,将始终返回此值,但我不知道如何将其放入函数。
任何帮助或点在正确的方向将是了不起的,提前谢谢你!
马克编译器不知道你的代码应该总是返回一些东西,并且"认为"if可能永远不会被击中,在这种情况下该方法将不返回任何东西。你可以解决这个问题,例如,如果没有发现抛出异常,像这样:
for(...)
{
//...
}
throw new Exception("The item you searched for isn't on the list!");
我不太确定你为什么要用一个方法来获取你已经知道的东西的索引,我认为你可以替换这行
displayIndex = imagePaths.IndexOf(imagePaths[i]);
:
displayIndex = i;
然后,你的整个函数应该具有与IndexOf本身相同的功能,所以你的整个代码应该缩减为如下所示:
return imagePaths.IndexOf(picboxImage.ImageLocation);
我猜你的错误是picboxImage。ImageLocation实际上并不包含在列表中。可能是格式错误。您应该尝试设置一个断点,并通过将鼠标光标悬停在变量上来调查变量的内容。这是一个非常简单的方法来找出他们的确切内容
好吧,图像显然没有找到否则displayIndex
会改变,所以你必须调试它,看看imagePaths
是否真的包含picboxImage.ImageLocation
。
- 在方法中设置一个断点
- 按F11进入。
- 在观察窗口检查
imagePaths
,看看你的照片是否在那里。 - 还要注意,
string
比较是区分大小写的所以你要么想使用imagePaths[i].ToLower == picboxImage.ImageLocation.ToLower()
或picboxImage.ImageLocation.Equals(imagePaths[i], StringComparison.InvariantCultureIgnoreCase);
。
同样,你应该使用
displayIndex = i;
代替:
displayIndex = imagePaths.IndexOf(imagePaths[i]);
你已经有索引了!
对于,不是所有的代码路径都返回值,您需要确保如果没有找到图像,则存在return
语句事件。只需在方法的末尾添加默认的return
值,如下所示:
public int displayImageIndex()
{
//access all images in list
for (int i = 0; i < imagePaths.Count; ++i)
{
//matches image in picturebox
if (picboxImage.ImageLocation == imagePaths[i])
{
//get index of image
return i;
}
}
return -1;
}
或者简化为以下Linq语句:
public int displayImageIndex()
{
return imagePaths.FindIndex(x => x.Equals(picboxImage.ImageLocation, StringComparison.InvariantCultureIgnoreCase));
}
您可以使用IndexOf
和ToLower()
以这种方式查找项目:
public int DisplayImageIndex()
{
return imagePaths.Select(x => x.ToLower()).ToList()
.IndexOf(picboxImage.ImageLocation.ToLower());
}
如果imagepath不包含该路径,函数返回-1