鉴于此代码:
public enum Stuff
{
a,b,c
}
public class RuleManager
{
public Stuff Stuff()
{
return Stuff.a;
}
public int BizRule()
{
Stuff currStuff = Stuff();
return 1; //who cares, just proving a point
}
}
我在public Stuff Stuff()
返回语句中有错误。说Stuff()
是method
,在给定的上下文中无效。我知道它自从方法和枚举共享相同的标记,但我想知道为什么编译器无法辨别差异以及我如何能够这样做。
好的进一步澄清一下,我从现有项目编译的代码很好,但是当放入新版本时,编译器就会出现这个问题。
为什么它会在一个类库项目中编译好而不能在另一个类库项目中编译?
答案 0 :(得分:6)
我想知道为什么编译器无法辨别差异
由于C#规范第7.4章成员查找:
成员查找是确定类型上下文中名称含义的过程。
此过程遵循一组规则,这些规则最终从向外的最近范围搜索,首先找到方法RuleManager.Stuff()
,然后停止搜索。因为您无法在没有括号的情况下调用方法,所以它无效并显示给定的错误。
一个简单的解决方法是引入命名空间:
namespace EnumNamespace
{
public enum Stuff
{
a, b, c
}
}
public class RuleManager
{
public EnumNamespace.Stuff Stuff()
{
return EnumNamespace.Stuff.a;
}
public int BizRule()
{
EnumNamespace.Stuff currStuff = Stuff();
return 1; //who cares, just proving a point
}
}
我无法完全看到您的代码将如何编译。尝试创建一个再现该问题的示例(“为什么这个无效的C#代码编译?”)。