如何检查GetPropertyItem在c#中是否存在
本文关键字:是否 存在 GetPropertyItem 何检查 检查 | 更新日期: 2023-09-27 18:02:18
我使用以下代码
int OrientationId = 0x0112;
imgd.SetPropertyItem(imgs.GetPropertyItem(OrientationId));
c#中的从图像中获取属性项,该属性项保持其方向。但是,如果此propertyitem不存在,则会抛出以下错误"System类型的异常"。在System.Drawing.dll中发生了ArgumentException,但没有在用户代码中处理"
因此,我认为我需要一些方法来确定这个propertyItem是否存在之前运行这段代码。任何帮助或输入高度赞赏,谢谢!
如果您正在使用Linq,您可以简单地执行:
var propertyExists = image.PropertyItems.Any(p => p.Id == 0x0112);
或者,如果你不想使用Linq:
var propertyFound = false;
foreach (var prop in image.PropertyItems)
{
if (prop.Id == 0x0112) propertyFound = true;
}
假设这是一个Image
,您可以使用Image。并检查您想要的id是否存在于该列表中。
类似:
var ids = imgs.PropertyIdList;
if (ids.IndexOf(OrientationId) != -1)
{
imgd.SetPropertyItem(imgs.GetPropertyItem(OrientationId));
}
else
{
// do something else
}
您可以直接使用try catch
:
int OrientationId = 0x0112;
try
{
imgd.SetPropertyItem(imgs.GetPropertyItem(OrientationId));
}
catch(ArgumentException e)
{
// Do whatever needs to be done
Console.Log(e.Message);
}
顺便说一句,ArgumentException
似乎告诉你错误不是由GetPropertyItem
抛出的,而是由SetPropertyItem
抛出的null
参数。避免这种情况的一种方法是:
int OrientationId = 0x0112;
PropertyItem p = imgs.GetPropertyItem(OrientationId);
if (p != null) imgd.SetPropertyItem(p);
我在另一个线程中看到了这个,所以我将在这里复制它,因为它对我来说是最好的
if (myImage.PropertyIdList.Any(p => p == 36867))
其中myImage是Image类型的对象