如何在C#

时间:2015-05-29 11:33:41

标签: 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 == tag)
            types.Add(type);
    return types;
}

问题是,由于T是通用变量,因此它没有标记属性。我可以理解为什么,因为可能是intstring。如何告诉编译器T仅用于控件,因此会有一个标记?

提前致谢。

1 个答案:

答案 0 :(得分:5)

您可以指定应从中继承T类型的类型。

+^http://abc\.test\.com/profiles/people/[a-zA-Z]+/([1-9]|1[0-9]|20)\.html

顺便说一句,调用foreach局部变量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; } 会使我感到困惑,因为实际上你是通过控件枚举的。所以,它应该是

type

它也适用于 foreach (T control in fm.Controls.OfType<T>()) ,实际上是 Control 的列表。有时,单个变量的错误名称会使代码的可读性降低:)