【问题标题】:C# Get the name of an object without knowing its TypeC# 在不知道其类型的情况下获取对象的名称
【发布时间】:2017-05-10 18:28:21
【问题描述】:
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
}

我有一个适用于许多不同对象类型的函数,我唯一需要的是名称。

【问题讨论】:

  • 我的第一个想法已经显示在答案here中;您要么需要切换所有已知类型,要么转换为 dynamic 并希望在运行时不会发生任何问题。
  • 如果所有对象都是控件,您可以将sender 转换为Control,因为Name 属性在Control 类中定义。

标签: c# object button properties


【解决方案1】:

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

var name = ((Control)sender).Name

【讨论】:

  • switch (((Control)ObjectList[i]).Name)... 这正是我想要的!谢谢:)
【解决方案2】:

在你不能使用通用基类型的情况下,例如如果你同时处理来自 WinForms 和 WPF 的项目,你可以使用反射来检查项目是否有 name 属性,然后如果有返回那个值。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我在做switch(sender.getType().Name){case "button": **GetName** break; case "CheckBox": **GetName**...。这是一个丑陋的混乱:P
    【解决方案4】:

    另外,如果基本类型不同,您可以如下反映:

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

    【讨论】:

    • 我不是这种方法的忠实拥护者的原因是,如果传递的对象没有Name 属性,该函数会爆炸。
    • 我试过了!但我做错了......无法弄清楚 GetValue 属性也必须接收对象:P 顺便说一句,它是sender.GetType().GetProperty("Name").GetValue(sender, null) @DangerZone 在我的情况下它总是有一个名称:)
    • 需要添加null检查来检查name方法是否存在。在控制台试了下,效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 2016-11-10
    • 2013-03-05
    相关资源
    最近更新 更多