IF语句检查控件是否具有标记值

本文关键字:是否 语句 检查 控件 IF | 更新日期: 2023-09-27 18:27:03

im试图循环遍历一些控件,然后根据控件的位置、宽度和高度制作一个矩形,并将其添加到列表中。

C#

List<Rectangle> MaskBlocks = new List<Rectangle>();
foreach (StackPanel gr in FindVisualChildren<StackPanel>(Container))
  if (gr.Tag.ToString() == "Blur")
  {
      System.Windows.Point tmp = gr.TransformToAncestor(this).Transform(new System.Windows.Point(0, 0));
      MaskBlocks.Add(new System.Drawing.Rectangle(new System.Drawing.Point((int)tmp.X,(int)tmp.Y), new System.Drawing.Size((int)gr.ActualWidth, (int)gr.ActualHeight)));
  }

当我运行代码时,我在IF语句中得到一个错误:

"System.NullReferenceException"类型的未处理异常发生在BlurEffectTest.exe 中

附加信息:对象引用未设置为对象

有人能帮我解释一下吗?

IF语句检查控件是否具有标记值

错误表示gr.Tag为null,因此失败。检查第一个是否为空

List<Rectangle> MaskBlocks = new List<Rectangle>();
foreach (StackPanel gr in FindVisualChildren<StackPanel>(Container))
if (gr.Tag!= null && gr.Tag.ToString() == "Blur")
{
    System.Windows.Point tmp = gr.TransformToAncestor(this).Transform(new System.Windows.Point(0, 0));
    MaskBlocks.Add(new System.Drawing.Rectangle(new System.Drawing.Point((int)tmp.X,(int)tmp.Y), new System.Drawing.Size((int)gr.ActualWidth, (int)gr.ActualHeight)));
}

gr.Tag is nullC#无法处理null.ToString()时,可能会出现异常。因此,在访问值之前最好先检查null。

if (!(gr.Tag is null) && gr.Tag.ToString() == "Blur")
 {
  //Here comes your code
 }

不是最有效的,但在这里,这可能会帮助其他人:

if (!(gr.Tag is null) && gr.Tag.GetType() == typeof(string) && (gr.Tag as string) == "Blur")
{
}