Метод расширения для добавления элементов в Enum - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь написать метод расширения, который добавит дополнительные элементы в перечисление.

Я никогда не писал метод расширения и посмотрел и попробовал несколько примеров, которые я нашел здесь, на Stackoverflow и на других интернет-сайтах, но ни один из них, по-видимому, не соответствует именно тому, что я пытаюсь сделать. Я пытаюсь расширить класс Windows.Form.DialogResult. Я пробовал код ниже:

public static class SaveTestDialog
{
    public enum CustomDialog( this DialogResult dialogResult )
    {
        return ApiKey = 8;
        return Default = 9;
    }

}

Я подумал, что, возможно, проблема была в том, что это был метод Windows, поэтому я попробовал простое перечисление в проекте и получил те же результаты:

public static class CustomSchedule 
{
    public enum NewSchedule( Schedule schedule )
    {
        return Weekly = 3;
        return Contract = 4;
    }

}

Для DialogResult я ожидаю, что смогу получить параметры DialogResult.ApiKey и DialogResult.Default при использовании CustomDialog в моем приложении. Я благодарен за любую помощь.

1 Ответ

2 голосов
/ 04 апреля 2019

Методы расширения добавляют новые экземпляро-подобные методы к типу. Они не позволяют вам добавлять реальных членов в тип. То, что вы пытаетесь сделать, невозможно.

Нет причины, по которой вы не могли бы сделать (DialogResult)8 и сделать это константой.

public static class ExtraDialogResults
{
    public const DialogResult ApiKey = (DialogResult)8;
    // and so on...
}

Но ... только потому, что вы можете , не означает, что вы должны . Лучшим способом было бы определить свой собственный enum, который дает нужные вам результаты, и обернуть функциональность диалога во что-то, что возвращает это.

...