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

本文关键字:取对象 获取 情况下 对象 类型 不知道 | 更新日期: 2023-09-27 18:16:54

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

在你不能使用通用基类型的情况下,比如如果你正在处理来自WinForms &同时,您可以使用反射来检查项目是否具有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;
}

同样,如果基类型不相同,您可以按照如下方式进行反射:

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