检索对象的类

时间:2016-06-15 15:47:06

标签: c# wpf

现在,我正在做的是获取WPF画布中的元素类:

    // for instance
    private void R_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
    {
        if (sender.ToString() == "System.Windows.Shapes.Rectangle")
        {
            // ok i am a rect
            System.Windows.Shapes.Rectangle r = (System.Windows.Shapes.Rectangle)sender;
            //etc...
        }
    }

不知何故,我觉得有一种更优雅的方式。有些东西:

    if (class(sender) == System.Windows.Shapes.Rectangle) ...

换句话说,C#中是否存在反射,如果没有,是如何模拟它的呢?

1 个答案:

答案 0 :(得分:7)

您可能正在寻找is运营商:

if (sender is System.Windows.Shapes.Rectangle)
    // it's a rectangle

或者更好地使用as运算符:

System.Windows.Shapes.Rectangle rect = sender as System.Windows.Shapes.Rectangle;
if (rect != null)
{
   // do something with rect
}

但这只适用于类,而不适用于结构或其他值类型。如果sender不属于该类型,则rect将为null直接强制转换,如(Rectangle)sender会抛出InvalidCastException )。

请注意,这两个运算符也适用于基类型。因此,如果sender确实是Rectanglesender is Shape也会返回true