C#4 динамическое ключевое слово - почему нет?

Вы можете использовать catchError :

Вам необходимо вернуть Observable, поэтому позвоните непосредственно в службу _us:

this.verifyFacebookUser2() {
  .catchError(() => this._us.facebookRegisterObs({"id_facebook": id}))
  .subscribe((user: User) => {
    alert('OK');
}  

или измените значение registerIdFacebook на вернуть метод обслуживания:

registerIdFacebook(id) {    
  return this._us.facebookRegisterObs({"id_facebook": id})
    .pipe(tap(
       (resultado) => {
         alert(JSON.stringify(resultado));
       }, 
       (error) => {
         //TODO PRESENT TOAST
         alert(JSON.stringify(error));
       }));
}


this.verifyFacebookUser2() {
  .catchError(() => this.registerIdFacebook(this.userId))
  .subscribe((user: User) => {
    alert('OK');
} 

6
задан Community 23 May 2017 в 12:10
поделиться

8 ответов

Некоторые рассматривают его как инструмент, который будет неправильно использован. Как "Опция, Строгая Прочь" и "На Ошибочном Резюме Затем" в VB, который никогда не имели "чистые" языки как C# и Java.

Многие сказали то же о ключевом слове "var", все же я не вижу, что им злоупотребляют, после того как это стало понятым, что это не было то же как "Вариант" VB

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

Я лично чувствую, что это могло использоваться правильно в таких ситуациях недавний вопрос, на который я ответил.

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

16
ответ дан 8 December 2019 в 02:09
поделиться

Я думаю, что большое отвращение, которое люди выражают этой функции, сводится к "этому, функция сквернословия, потому что это позволит плохим разработчикам писать плохой код". Если Вы думаете об этом той логикой, все функции языка плохи.

Когда я сталкиваюсь с блоком кода VB, который снабдил префиксом некоторый гений On Error Resume Next, это не VB, который я проклинаю. Возможно, я должен, я предположить. Но по моему опыту человек, который полон решимости поместить пенс в блок предохранителей, найдет путь. Даже если Вы освободите его карманы, то он сформирует свои собственные пенсы.

Меня, я с нетерпением жду более полезного способа взаимодействовать между C# и Python. Я пишу все больше кода, который делает это. dynamic ключевое слово не может прибыть достаточно скоро для того конкретного варианта использования, потому что текущий способ сделать его заставляет меня чувствовать, что я - советский академик в 1950-х, который путешествует на Запад для конференции: существует огромная сумма правил и документов, прежде чем я доберусь для отъезда, я вполне уверен чья-то попытка наблюдать за мной все время, которое я там, и большая часть того, что я беру, в то время как я, там будет отнят меня на границе, когда я возвращаюсь.

17
ответ дан 8 December 2019 в 02:09
поделиться

динамичный плохо, потому что код как это появится повсеместно:

public dynamic Foo(dynamic other) {
  dynamic clone = other.Clone();
  clone.AssignData(this.Data);
  return clone ;
}

вместо:

public T Foo<T>(T other) where T: ICloneable, IAssignData{
    T clone = (T)other.Clone();
    clone.AssignData(this.Data);
    return clone;
}

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

Я уже начинаю бояться динамичный.

Править: Опасность передала (Уф!)... и динамичный не был злоупотреблен, в конце концов, никакая потребность вниз проголосовать за меня после 3 лет :)

7
ответ дан 8 December 2019 в 02:09
поделиться

Это - вид подобных обсуждающих общедоступных камер, уверенных, что они могут и неправильно использоваться, но существуют преимущества для наличия их также.

Нет никакой причины, почему Вы не могли запретить "динамическое" ключевое слово в своей собственной инструкции по кодированию, если Вам не нужны они. Таким образом, какова проблема? Я имею в виду, если Вы хотите сделать сумасшедшие вещи с "динамическим" ключевым словом и притвориться, что C# является некоторым кузеном мутанта JavaScript, быть моим гостем. Просто не допустите эти эксперименты в мою кодовую базу.;)

1
ответ дан 8 December 2019 в 02:09
поделиться

Когда люди понимают, что не получают хороший IntelliSense с dynamic, они переключатся назад от того, чтобы быть dynamic- счастливый к dynamic- when-necessary-and-var- at-all-other-times.

Цели dynamic включайте: совместимость с динамическими языками и платформами, такими как COM/C ++ и DLR/IronPython/IronRuby; а также поворачивая сам C# в IronSmalltalkWithBraces со всем реализация IDynamicObject.

Хорошие времена будут иметься всеми. (Если Вы не должны поддерживать код, кто-то еще записал.)

2
ответ дан 8 December 2019 в 02:09
поделиться

Реальная ловушка? Серьезное отсутствие документации. Архитектура целого приложения существует в уме человека (или люди), кто записал это. По крайней мере, со строгим контролем типов, можно пойти, видят то, что объект делает через его определение класса. С динамическим контролем типов необходимо вывести значение из, он - использование, в лучшем случае В худшем случае Вы понятия не имеете, каков объект. Это похоже на программирование всего в JavaScript. ACK!

6
ответ дан 8 December 2019 в 02:09
поделиться

Я не вижу оснований, почему текущий способ вызвать методы динамично испорчен:

Это проводит три строки, чтобы сделать это, или можно добавить дополнительный метод в Системе. Объект сделать это для Вас:

class Program
{
    static void Main(string[] args)
    {
        var foo = new Foo();            
        Console.WriteLine(foo.Invoke("Hello","Jonathan"));
    }        
}

static class DynamicDispatchHelper
{
    static public object Invoke(this object ot, string methodName, params object[] args)
    {
        var t = ot.GetType();
        var m = t.GetMethod(methodName);
        return m.Invoke(ot, args);
    }
}

class Foo
{
    public string Hello(string name)
    {
        return ("Hello World, " + name);
    }
}
-2
ответ дан 8 December 2019 в 02:09
поделиться

FUD. Возможно, это лучший вариант со времен нарезанного хлеба, но весь мой опыт работы с VB, JavaScript и т. Д. Вызывает у меня мурашки по поводу того, что C # будет иметь динамическую привязку. Я знаю, что в ближайшем будущем я смогу взглянуть на это рационально и посмотреть, насколько хороша эта новая функция для обеспечения взаимодействия с динамическими языками. Но на это потребуется время. Я человек, ладно? : -)

-1
ответ дан 8 December 2019 в 02:09
поделиться
Другие вопросы по тегам:

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