繁体   English   中英

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

[英]C# Get the name of an object without knowing its Type

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。

只需将其转换为基本类型Control

var name = ((Control)sender).Name

另外,如果基本类型不同,则可以按以下方式反映:

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

如果不能使用通用基本类型,例如同时处理WinForms和WPF中的项目,则可以使用反射检查该项目是否具有name属性,然后是否确实返回该值。 。

public string GetNameIfExists(dynamic item)
{
    if (item.GetType().GetProperty("Name") != null)
    {
        return item.Name;
    }
    return null;
}

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

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM