如何检查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是否存在之前运行这段代码。任何帮助或输入高度赞赏,谢谢!

如何检查GetPropertyItem在c#中是否存在

如果您正在使用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类型的对象