我的班级:
public static class Global
{
public static void TextBoxEmpty<T>(T ContainerControl) where T : ContainerControl
{
foreach (var t in ContainerControl.Controls.OfType<TextBox>())
{
t.Text = string.Empty;
}
}
}
使用:
private void btnCancel_Click(object sender, EventArgs e)
{
Global.TextBoxEmpty<GroupBox>(this.grpInfoBook);
}
错误:
类型'System.Windows.Forms.GroupBox'不能用作类型 泛型类型或方法中的参数'T' 'Global.TextBoxEmpty(T)'。没有隐式引用转换 从'System.Windows.Forms.GroupBox'到 'System.Windows.Forms.ContainerControl'。
什么是正确的代码?
答案 0 :(得分:4)
您根本不需要where
限制,因为您正在使用OfType
代码来过滤列表。但是,如果您想保留限制,请将其更改为引用System.Windows.Controls.Control
:
public static class Global
{
public static void TextBoxEmpty<T>(T ContainerControl) where T : Control
{
foreach (var t in ContainerControl.Controls.OfType<TextBox>())
{
t.Text = string.Empty;
}
}
}
查看GroupBox
的文档,您会发现它不会从ContainerControl
继承:
System.Object
System.Windows.Threading.DispatcherObject
System.Windows.DependencyObject
System.Windows.Media.Visual
System.Windows.UIElement
System.Windows.FrameworkElement
System.Windows.Controls.Control
System.Windows.Controls.ContentControl
System.Windows.Controls.HeaderedContentControl
System.Windows.Controls.GroupBox
http://msdn.microsoft.com/en-us/library/system.windows.controls.groupbox.aspx
答案 1 :(得分:0)
GroupBox的继承层次结构是:
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Windows.Forms.Control
System.Windows.Forms.GroupBox
ContainerControl类型不在此继承树中,因此是错误消息的原因。
答案 2 :(得分:0)
您已定义的通用约束将使用限制为ContainerControl类型。但是GroupBox不是容器控件。它派生自Control类。