C# 如何在C中查找泛型控件的标记#
我正在创建一个函数,允许您通过标记搜索控件。唯一的参数是标记的名称。它返回带有标记的所有类型C# 如何在C中查找泛型控件的标记#,c#,winforms,generics,C#,Winforms,Generics,我正在创建一个函数,允许您通过标记搜索控件。唯一的参数是标记的名称。它返回带有标记的所有类型T控件的列表。这就是我所拥有的: public static List<T> FindWithTag<T>(string tag) { List<T> types = new List<T>(); foreach (T type in fm.Controls.OfType<T>()) if (type.Tag =
T
控件的列表。这就是我所拥有的:
public static List<T> FindWithTag<T>(string tag)
{
List<T> types = new List<T>();
foreach (T type in fm.Controls.OfType<T>())
if (type.Tag == tag)
types.Add(type);
return types;
}
公共静态列表FindWithTag(字符串标记)
{
列表类型=新列表();
foreach(fm.Controls.OfType()中的T类型)
if(type.Tag==Tag)
类型。添加(类型);
返回类型;
}
问题是,因为T
是一个泛型变量,所以它没有标记属性。我能理解为什么,因为可能是int
或string
。如何告诉编译器T
仅用于控件,因此会有一个标记
提前感谢。您可以指定从中继承T类型的类型
public static T[] FindWithTag<T>(string tag) where T : Control
{
List<T> types = new List<T>();
foreach (T type in fm.Controls.OfType<T>())
if (type.Tag == tag)
types.Add(type);
return types;
}
它也适用于
列表类型
,实际上,它是一个控件列表。有时,单个变量的名称不正确会使代码的可读性大大降低:)您可以指定T类型应从中继承的类型
public static T[] FindWithTag<T>(string tag) where T : Control
{
List<T> types = new List<T>();
foreach (T type in fm.Controls.OfType<T>())
if (type.Tag == tag)
types.Add(type);
return types;
}
它也适用于
列表类型
,实际上,它是一个控件列表。有时,单个变量的名称不正确会使代码的可读性大大降低:)魔术搜索词是一个“魔术搜索词是一个”,有了这种类型限制,整个方法体可以变成return fm.Controls.OfType()。其中(type=>type.Tag==Tag).ToArray()代码>@YeldarKurmangaliyev哈哈,是的,当我输入它的时候,我觉得变量名可能有些混乱。但这很好用,谢谢你的帮助!:)使用该类型限制,整个方法体可以变成return fm.Controls.OfType().Where(type=>type.Tag==Tag.ToArray()代码>@YeldarKurmangaliyev哈哈,是的,当我输入它的时候,我觉得变量名可能有些混乱。但这很好用,谢谢你的帮助!:)