【发布时间】:2015-01-04 18:17:55
【问题描述】:
我正在创建一个数据库,我需要为数据库中与名称匹配的所有条目建立索引。
这是使用它的地方:
dDatabase.FindAll(findArea.Match);
这是 findArea 类:
public class FindArea
{
string m_Name;
public FindArea(string name)
{
m_Name = name;
}
public Predicate<databaseEntry> Match
{
get { return NameMatch; }
}
private bool NameMatch(databaseEntry deTemp)
{
if(deTemp.itemName == m_Name)
{
return true;
}
else
{
return false;
}
}
}
这是 databaseEntry 类的精简功能:
class databaseEntry
{
public databaseEntry(int id, int area, string name)
{
rfid = id;
currentArea = area;
itemName = name;
}
}
我的问题是,当我尝试编译时,我得到了
“错误 CS0053:可访问性不一致:属性类型 'System.Predicate
' 比 属性 Database.FindArea.Match"
在Predicate<databaseEntry> Match 函数中。
更新
所以感谢大家的帮助,我需要将 databaseEntry 类的访问权限设置为 public,
即
public class databaseEntry
或者我可以更改:
public class FindArea
到:
class FindArea
并且不理会 databaseEntry
这是由于混合了两个类的不同可访问性
【问题讨论】:
-
什么不清楚?您的谓词是
public但返回databaseEntry这是内部的。 -
其实是在抱怨类型参数
databaseEntry -
@JeroenVannevel:非嵌套的受保护内部类?
-
问题是
class databaseEntry不是公开的,这意味着如果你想暴露public Predicate<databaseEntry> Match那么导出需要知道databaseEntry。
标签: c#