c# - 如何安全访问对象的属性

标签 c# winforms events dynamic reflection

我有一个 WinForms 应用程序,其中有多个映射到同一处理程序的菜单项命令。我使用菜单项的 Tag 属性来确定处理程序的行为方式。

问题是,处理程序的 sender 参数的类型为 object。那么如何读取对象的 Tag 属性呢?

我知道我可以将 sender 类型转换为菜单项的类型,但是如果我随后想要将按钮或其他控件映射到同一处理程序怎么办?是否有一种通用方法可以从发送者的任何对象中读取 Tag 属性?

这是我到目前为止所拥有的。似乎有效。但是有没有更精简的方法呢?

private void Header_Click(object sender, EventArgs e)
{
    dynamic ctrl = sender as dynamic;
    if (ctrl != null && sender.GetType().GetProperty("Tag") != null)
    {
        // Go ahead and reference ctrl.Tag
    }
}

最佳答案

您可以将 is 强制转换为所有控件的父类型,而不是特定的子控件。

Control ctrl = sender as Control;
if (ctrl != null)
    MessageBox.Show(ctrl.Tag.ToString());

关于c# - 如何安全访问对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17382972/

相关文章:

.net - 为什么有些控件同时具有 BackgroundImage 和 Image 属性?

c# - .NET 应用程序根本无法在客户端计算机中启动

javascript - 使用自定义事件模拟 domready 事件 (mootools)

c# - 进程 sqlservr.exe 在 C# 中的 Connection.Close() 之后继续运行

c# - DateTime TryParseExact 包含 3 个字母月份的字符串

c# - 使用 C# 模拟 javascript _dopostback

c# - CultureInfo.Name 属性

c# - 放置在主窗体中时,用户控件间距会变大

c# - xamarin.forms 中的页面生命周期事件

C#:引发继承事件