2016-04-14 101 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 

簡單地說就是發生這個錯誤,因爲相關的類型和方法需要有相同的訪問修飾符。因此,無論是公開的還是內部的方法。