Почему параметр enum НЕ может принимать значение int (> 0) в методе перегрузки - PullRequest
3 голосов
/ 22 мая 2019

Это мой код:

public class Program
{
    public enum SexEnum{
        Male,
        Female
    }

    public static void Test(SexEnum s){
        Console.WriteLine("enum...");
    }


    public  static void Test(Object s){
        Console.WriteLine("object...");
    }

    public static void Main(string[] args)
    {
        Test(0);
        Test(1);
    }
}

Но фактический результат:

enum...  
object...

Почему параметр enum НЕ может принимать значение int (> 0) в методе перегрузки?

1 Ответ

7 голосов
/ 22 мая 2019

Это четко указано в спецификации языка, раздел 6.1.3 Неявные преобразования перечисления (выделено мной):

Неявное преобразование перечисления разрешает десятичное целое-литеральное 0 для преобразования в любой перечислимый тип и в любой обнуляемый тип, базовый тип является типом перечисления. В последнем случае конверсия оценивается путем преобразования в базовый тип enum и переноса результат

Таким образом, только литерал 0 может быть неявно преобразован в любое перечисление, не 1, не 2, только 0.

Это можно продемонстрировать, сняв перегрузку, которая занимает Object, Test(1) не сможет скомпилироваться.

Относительно того, почему язык спроектирован таким образом , вам придется спросить дизайнеров языка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...