的问题与您的代码是T
可以任何类型,并非所有类型的具有这样的性质ReadOnly
。因此编译器会窒息。
你不需要使用泛型要做到这一点:
private void SetTextBoxReadOnly(Control parent, bool readOnly)
{
// Get all TextBoxes and set the value of the ReadOnly property.
foreach (var tb in parent.Controls.OfType<TextBox>())
tb.ReadOnly = readOnly;
// Recurse through all Controls
foreach(Control c in parent.Controls)
SetReadOnly(c, readOnly);
}
不过,若你想使用泛型,你可以做这样的:
private void SetTextBoxReadOnly<T>(Control parent, bool readOnly) where T : TextBox
{
// Get all TextBoxes and set the value of the ReadOnly property.
foreach (var tb in parent.Controls.OfType<T>())
tb.ReadOnly = readOnly;
// Recurse through all Controls
foreach(Control c in parent.Controls)
SetReadOnly<T>(c, readOnly);
}
这将限制通用键入到TextBox
或从它派生的任何类。这确保ReadOnly
属性将始终在那里,编译器知道这一点。