请参阅下面的代码示例:
CODE UPDATED
public class ScrollableCheckboxList
{
public List<ScrollableCheckboxItem> listitems;
public ScrollableCheckboxList<TModel>(IEnumerable<TModel> items, string valueField, string textField, string titleField) where TModel : class
{
listitems = new List<ScrollableCheckboxItem>();
foreach (TModel item in items)
{
Type t = typeof(TModel);
PropertyInfo[] props = new [] { t.GetProperty(textField), t.GetProperty(valueField), t.GetProperty(titleField) };
listitems.Add(new ScrollableCheckboxItem
{
text = props[0].GetValue(item, null).ToString(),
value = props[1].GetValue(item, null).ToString(),
title = props[2].GetValue(item, null).ToString()
});
}
}
}
修改 对构造函数声明的更正!虽然这个代码仍然存在问题
代码不会编译 - 它会产生许多奇怪的小错误,让我觉得这里有设计问题?
答案 0 :(得分:4)
正如其他人指出的那样,您应该删除void
关键字,但它仍然不正确。泛型声明应该在类上,而不是构造函数
public class ScrollableCheckboxList<TModel>
where TModel : class
{
public ScrollableCheckboxList(...)
{
// ...
}
}
答案 1 :(得分:3)
函数ScrollableCheckboxList
的名称与您的类名相同。
错误本身是正确的,您的代码不是。
你想声明一个构造函数,但是通过在构造函数名称之前添加void,C#编译器认为它是一个函数。函数不能与它们所在的类同名(因此错误)。
因此,在函数名称前面删除void
,然后它将是一个构造函数。
并在班级指定TModel
约束。
public /* void */ ScrollableCheckboxList /* <TModel> */(IEnumerable<TModel> items, string valueField, string textField, string titleField) /* where TModel : class */
答案 2 :(得分:2)
发现问题
构造函数可能不会声明通用的TModel定义,类声明必须执行该作业
e.g。
public class ScrollableCheckboxList<TModel> where TModel : class
{
public List<ScrollableCheckboxItem> listitems;
public ScrollableCheckboxList(IEnumerable<TModel> items, string valueField, string textField, string titleField)
{
...
答案 3 :(得分:2)
您不能拥有采用泛型参数的构造函数。您需要将通用参数移动到类级别,或者将项目设置为采用通用参数的方法。
public class ScrollableCheckboxList<TModel>
where TModel : class
{
public List<ScrollableCheckboxItem> listitems;
public ScrollableCheckboxList(IEnumerable<TModel> items, string valueField, string textField, string titleField)
{
listitems = new List<ScrollableCheckboxItem>();
foreach (TModel item in items)
{
Type t = typeof(TModel);
PropertyInfo[] props = new [] { t.GetProperty(textField), t.GetProperty(valueField), t.GetProperty(titleField) };
listitems.Add(new ScrollableCheckboxItem
{
text = props[0].GetValue(item, null).ToString(),
value = props[1].GetValue(item, null).ToString(),
title = props[2].GetValue(item, null).ToString()
});
}
}
}
这应该可以正常工作,但我也建议你不要直接公开List成员变量。
答案 4 :(得分:0)
您没有声明构造函数。构造函数中没有void
个关键字:
public ScrollableCheckboxList<TModel>(IEnumerable<TModel> items, string valueField, string textField, string titleField) where TModel : class {}
类型不能包含与类型名称相同的方法。
答案 5 :(得分:0)
它不是构造函数,要成为构造函数,你要删除“void”关键字。
答案 6 :(得分:0)
构造函数必须是
public ScrollableCheckboxList<TModel>
而不是
public void ScrollableCheckboxList<TModel>
换句话说,放弃虚空。