簡體   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