【问题标题】:enum with function error有函数错误的枚举
【发布时间】:2016-08-05 21:41:53
【问题描述】:

我是一名初学者程序员,我是使用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);
}

【问题讨论】:

  • 欢迎来到编码和stackoverflow - 你告诉我们,它编译了吗?它不会产生什么错误?请阅读stackoverflow/help/How-to-asl
  • 错误出现在ShowDay(X);还是ShowDay(Day.Friday);
  • public enum Day { 周六、周日、周一、周二、周三、周四、周五 }

标签: c# function methods enums


【解决方案1】:

你应该公开你的enum

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

UPD:或从ShowDay 方法中删除public

【讨论】:

  • @HimBromBeere,这不是一个真实的说法。如果它是internal,它仍然比public 更难访问并且不会编译。
  • 我们这样做,因为公共方法将其签名暴露给外部世界,外部世界必须知道公共方法参数的类型才能执行它。
  • 或者只是从方法中删除 public。
  • 谢谢Mr.Dmitri Trofimov 速度解答,但是为什么在同一个类中存在枚举和函数却出现了这个错误
  • 不,我的回答是多余的,因为你更新了你的。无论如何+1 ;)
【解决方案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 的任何东西。

【讨论】:

    【解决方案3】:

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

    static void ShowDay(Day CurrentDay) // No error
    

    简单地说这个错误的发生是因为相关的类型和方法需要有相同的访问修饰符。所以要么公开所有内容,要么公开方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 2012-08-27
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      相关资源
      最近更新 更多