Что состоит в том, чтобы передать лучший способ, тот Ваш конструктор перестал работать в C#?

Насколько я понимаю вашу проблему, вы можете привязать событие к родительскому элементу, который существует в примере загрузки страницы document

$(document).on('click','.action-complete-task:not(.action-2)',function(){
//...1
})

$(document).on('click','.action-complete-task.action-2',function(){
//...2
})

, таким образом, он должен работать со вставленными вручную элементами (DOM-Manipulation ), а не запускать action1 (как это происходит сейчас, потому что ваш .action-2 также принадлежит .action-complete-task)

9
задан Blorgbeard 23 January 2009 в 01:39
поделиться

5 ответов

throw new ArgumentException("Reason", "param name");
23
ответ дан 4 December 2019 в 06:30
поделиться

Наиболее принятое решение состоит в том, чтобы выдать исключение. Чтобы доказать это, откройте отражатель и взглянуть на большинство классов от BCL и исключений, которые они могут выдать на конструкции.

Как пример. Список (набор IEnumerable) выдаст исключение, если набор будет пустым. Совершенно допустимый способ передать ошибки вызывающей стороне.

4
ответ дан 4 December 2019 в 06:30
поделиться

Много (все?) ответов говорят для выдачи исключения, но я уверен, что видел официальные заявления от команды разработчиков платформы, отговаривающей от выдавания исключения от конструкторов.

Обратите внимание, что классы в платформе.NET, которые ведут себя так же к Вашему "Банановому" примеру (где только определенные значения являются соответствующими для инстанцирования объекта с) не используют конструкторов, но вместо этого используют статические методы фабрики. Например, Система. Сеть. WebRequest не имеет никакого общедоступного конструктора и вместо этого использует помехи, Создают метод, который может повысить исключение, если предоставленной строкой не является допустимый URI. За некоторыми исключениями - посмотрите мое обновление ниже.

Таким образом для Вашего кода я изменил бы конструктора Banana на защищенный, и представил бы метод как это:

public static Banana Create(string color) 
{
    if (color != "green" && color != "yellow")
    {
        throw new ArgumentException("Color must be 'green' or 'yellow'", 
            "color");
    }
    return new Banana(color);
}

Обновление

Хорошо, кажется, что это не плохая идея выдать исключения от конструктора. На самом деле, Система. IO.FileStream делает просто это, если Вы передаете недопустимое имя файла его конструктору. Я предполагаю, что идея использовать статический метод фабрики является всего одним способом быть более явной о том, как Вы создаете экземпляр (например, если метод выше назвали "FromColor").

9
ответ дан 4 December 2019 в 06:30
поделиться

Если Ваш конструктор перестал работать, необходимо выдать исключение. По определению Конструкторы не возвращают значения, таким образом, Вы наклоняете возврат, скажем, код ошибки.

public class Banana 
{
    public Banana(string color)
    {
        if ( color == "red" )
          throw new SomeException("intialization failed, red is an invalid color");

    }
}
//////////////////////////////////////////////////////////     
try
{
    Banana banana1 = new Banana("green");
    banana1.whatever();
}
catch( SomeException error )
{
    // do something
}
finally
{
    // always do  this stuff
}
1
ответ дан 4 December 2019 в 06:30
поделиться

Я думаю, что Вы хотите ArgumentException...

0
ответ дан 4 December 2019 в 06:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: