我目前正在使用一个 Web 表单应用程序,其中我正在使用Devexpress
控件。我正在使用的控件是(但不限于(:
- 引导组合框
- BootstrapSpinEdit
- BootstrapTextBox
形式相当大,所以我试图实现的是传入,例如 IEnumerable<T>
,然后循环访问集合,并将 ReadOnly
属性设置为 true
。我知道我一次可以做一个控件,但我有 50 多个控件,所以我想知道是否有更通用的方法。
我有以下代码片段:
public static void MakeControlReadOnly<T>(this IEnumerable<T> controlCollection)
{
foreach(var c in controlCollection)
c.ReadOnly = true;
}
但是我不断收到一个错误:
严重性代码说明项目文件行抑制状态 错误 CS1061 "T"不包含"只读"的定义,并且找不到接受类型"T"的第一个参数的扩展方法"只读"(是否缺少 using 指令或程序集引用?
我理解这个错误,但我不确定如何克服它。
尝试隐式类型
T
作为ASPxEditBase
,DevExpress
的基本可编辑控件
public static void MakeControlReadOnly<T>(this IEnumerable<T> controlCollection)
where T: ASPxEditBase
{
controlCollection.ToList().ForEach(x=> x.ReadOnly = true);
}
可以在包含只读属性的基类的泛型上放置类型约束
public static void MakeControlReadOnly<T>(this IEnumerable<T> controlCollection) where T: BaseType //Set this to the correct base type
{
foreach(var c in controlCollection)
c.ReadOnly = true;
}