.net中的Tag属性有什么用处

我注意到带控件的Tag属性。 是否可以使用它来引用我的自定义对象,或者我应该远离它,因为它需要装箱和拆箱,这被提到是不安全的并且不推荐。

TreeNode tn = new TreeNode (); CustClass o = new CustClass() o.number = 123; tn.Tag = o; class CustClass { public int number {get; set;} } 

Tag属性的目的是让您将其用于任何您想要的目的。 您可以安全地存储您想要的任何内容。

习惯上声明一个专门用于存储在Tag属性中的类(就像您使用CustClass )。 但是如果你只需要一个值,那么直接存储int就没有错。

你在哪里读到拳击/拆箱是“不安全的”? 这绝对不是真的。 (有些人声称它效率低下 ,但即便如此也是如此。)此外,你的代码甚至都没有包含拳击的例子。 CustClass是一种引用类型。 分配给object时,只有值类型被装箱。

我不认为这将是一个拳击或拆箱问题,以你想要的方式使用它。 据我所知,Tag属性仅供程序员使用,因此您可以按照您需要的方式使用它。

有关如何使用此属性的进一步参考,请参阅MSDN上的Control.Tag属性。

例如,我曾经用它在Windows窗体应用程序中向用户输入指令。 当触发控件GotFocus事件时,指令Label.Text属性被赋予我的控件Tag属性的值,该属性包含指令字符串。

来自其他人提到的链接:

在https://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag.aspx上写着:

可以将从Object类派生的任何类型分配给此属性。 如果通过Windows窗体设计器设置Tag属性,则只能分配文本。

Tag属性的常见用途是存储与控件密切相关的数据。 例如,如果您有一个显示客户信息的控件,则可以在该控件的Tag属性中存储包含客户订单历史记录的DataSet,以便快速访问数据。

在https://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.tag.aspx上写着:

…示例创建一个根树节点以分配子树节点。 ArrayList中每个Customer对象的子树节点将添加到根树节点以及分配给Customer对象的每个Order对象的子树节点。 Customer对象分配给Tag属性,表示Customer对象的树节点以橙色文本显示。 此示例要求您定义Customer和Order对象,Form上的TreeView控件以及包含Customer对象的名为customerArray的ArrayList。