在不知道对象类型的情况下获取对象的名称
本文关键字:取对象 获取 情况下 对象 类型 不知道 | 更新日期: 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);
}
}