现在,我正在做的是获取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#中是否存在反射,如果没有,是如何模拟它的呢?
答案 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
确实是Rectangle
,sender is Shape
也会返回true
。