2016-04-14 100 views
1

我是一个初学者程序员我是通过使用visual basic.net编写代码,所以我想研究C#,能帮我解决这个代码 你好,这个代码有什么错误?枚举与功能错误

enum Day 
{ 
    Saturday, Sunday, Monday, Tuesday, Wednesday,Thursday, Friday  
} 
public static void ShowDay(Day CurrentDay) // Error 
{ 
    if (CurrentDay == Day.Friday) 
     Console.WriteLine("A vacation"); 
} 
static void Main(string[] args) 
{ 
    Day X; 
    X = Day.Friday; 
    ShowDay(X); 
    ShowDay(Day.Friday); 
} 
+2

欢迎来到编码和stackoverflow - 你告诉我们,它编译?它不会产生什么错误?请阅读http://www.stackoverflow/help/How-to-asl – BugFinder

+0

这里发生错误'ShowDay(X);'或这里'ShowDay(Day.Friday);'? –

+0

public enum日 { 周六,周日,周一,周二,周三,周四,周五 } –

回答

4

您应该使您的enum为公共。

public enum Day 
{ 
    Saturday, Sunday, Monday, Tuesday, Wednesday,Thursday, Friday  
} 

UPD:还是从ShowDay方法去除public

+0

@HimBromBeere,这不是一个真实的陈述。如果它是'internal',它比'public'更容易访问,并且不会被编译。 –

+0

我们这样做,是因为公共方法向外部世界公开其签名,外部世界必须全面了解公共方法参数的类型才能执行它。 –

+2

或者只是从方法中删除公共。 – Toxantron

2

这是一个工作.NET Fiddle

public enum Day 
{ 
    Saturday, 
    Sunday, 
    Monday, 
    Tuesday, 
    Wednesday, 
    Thursday, 
    Friday 
} 

public static void ShowDay(Day CurrentDay) 
{ 
    if (CurrentDay == Day.Friday) 
     Console.WriteLine("A vacation"); 
} 

public static void Main(string[] args) 
{ 
    Day X; 
    X = Day.Friday; 
    ShowDay(X); 
    ShowDay(Day.Friday); 
} 

的问题是,你的方法是公开的,但参数的变量类型是不是 - 因此它被认为是“不太容易接近”。

更新

的想法是,access modifier必须对齐,都需要考虑几个关键场景。

在这种情况下,您省略了enum声明中的访问修饰符 - 对于顶级类型,这是internal,嵌套类型是private。现在,当您将方法ShowDay(Day currentDay)定义为public时,这意味着它暴露给引用此类的任何人。问题是,该参数没有公开,但是您将其定义为参数。这有帮助吗?

但是,将enum定义为public并且将该方法定义为小于public的任何值都可以。

0

您也可以通过将internal放在它的前面或简单地删除public关键字来使您的方法成为内部的。

static void ShowDay(Day CurrentDay) // No error 

简单地说就是发生这个错误,因为相关的类型和方法需要有相同的访问修饰符。因此,无论是公开的还是内部的方法。