鉴于此代码:
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
}
}
Run Code Online (Sandbox Code Playgroud)
我在public Stuff Stuff()return语句中有错误.说这Stuff()是method在给定的上下文中无效的.我知道它自从方法和枚举共享相同的标记,但我想知道为什么编译器无法辨别差异以及我如何能够这样做.
好的进一步澄清,我有一个现有项目的代码编译得很好,但当放入一个新的编译器有这个问题.
为什么它会在一个类库项目中编译好,而不是另一个?
我想知道为什么编译器无法辨别差异
由于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
}
}
Run Code Online (Sandbox Code Playgroud)
我不太清楚你的代码是如何编译的.尝试创建一个再现该问题的示例("为什么这个无效的C#代码编译?").
| 归档时间: |
|
| 查看次数: |
1323 次 |
| 最近记录: |