C#在不知道其类型的情况下获取对象的名称

时间:2016-11-08 17:40:31

标签: c# object button properties

private void function(object sender, EventArgs e)

是否可以在不使用变量的情况下获取名称?

if(sender.getType().Name == "Button") {
    Button btn = sender as Button;
    ObjName = btn.Name
}

if(sender.getType().Name == "CheckBox") {
    CheckBox cbx= sender as CheckBox;
    ObjName = cbx.Name
}

我有一个可以处理许多不同对象类型的函数,我唯一需要的是Name。

4 个答案:

答案 0 :(得分:4)

将其强制转换为基类型Control

var name = ((Control)sender).Name

答案 1 :(得分:0)

另外,如果基本类型不同,您可以按如下方式进行反思:

private  void function(object sender)
{
     if (sender != null && sender.GetType().GetProperty("Name") != null)
        {
            var val = sender.GetType().GetProperty("Name").GetValue(sender);
        } 
}

答案 2 :(得分:0)

如果您不能使用通用基本类型,例如您正在处理来自WinForms&amp ;;的项目。 WPF同时,您可以使用反射来检查项目是否具有名称属性,然后是否确实返回该值。

.Replace

答案 3 :(得分:0)

此模式比检查类型名称更常见:

var btn = sender as button;
if (btn != null) // it's a button
{
    //...
    return;
}
var chkbx = sender as checkbox;
if (chkbx != null) // it's a checkbox
{
   //...
   return;
}