1. C# / Говнокод #2119

    +95.7

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    static bool EqStr(string s)
    {
                Regex r = new Regex(@"STRING");
                Match m = r.Match(s);
                if (m.Success == true) return true;
                else return false;
    }

    Изощренный способ сравнивать строки :)

    Запостил: psina-from-ua, 10 Ноября 2009

    Комментарии (23) RSS

    • так она походу даже не проверяет на совпадение, а на подмножество, не говоря уже о конце с return. в общем автор достоин премии "говнокодер года".
      я бы просто написал:
      if (str1.lenght == str2.lenght)
      {
      for(int i=0; i<str1.lenght; i++)
      if(str1[i]!=str2[i]) return false;
      return true
      }
      return false;
      Ответить
      • Я бы просто написал ==
        Ответить
        • неверно, это сравнение ссылок, они не всегда сопадают, верная запись - str1.Equals(str2)
          Ответить
          • что за бред?! по вашему "fff" == "fff" (обьекты разные) - вернет false?
            Ответить
            • именно, оператор == проверяет равенство ссылок, а вы уверены что указатели этих строк совпадают? читайте мат часть. Рекомендую почитать Рихтера CLR via C#
              зЫ на счет бред или не бред - сначала разберитесь, потом ругайтесь нецензурно
              Ответить
              • ересь, откройте рефлектором тип String и посмотрите реализацию переопределения == - увидите, что внутри неё вызывается Equals (который реализован как посимвольное сравнение (с unsafe указателями)). Таким образом, для String == и Equals абсолютно одно и тоже.
                Ответить
                • я устал от непонимания и не желания понимать, Debugger нас рассудит
                  Ответить
                  • Console.WriteLine("foo" == "foo"); вот такую строчку выполните - результат вас удивит.
                    Ответить
                  • public static bool operator ==(string a, string b)
                    {
                    return Equals(a, b);
                    }

                    //стукнув по Equals - переходим на:
                    public static bool Equals(string a, string b)
                    {
                    return ((a == b) || (((a != null) && (b != null)) && EqualsHelper(a, b)));
                    }
                    //а EqualsHelper(a, b) - посимвольное сравнение...
                    Т.е. тут если ссылки одинаковые - то 100% строки одинаковые, если ссылки разные - посимвольное сравнение

                    PS: рекомендую читать msdn, и спецификацию
                    PS2: спорить после такого - показывать свою полную некомпетенцию...
                    Ответить
                    • string someText = " hello world ";

                      object s1 = someText.Trim();
                      object s2 = someText.Trim();

                      Console.WriteLine(s1 == s2);

                      прошу запустить этот код и не показывать свою некомпетентность, ну а про перегрузки оператора конечно слышал, но не о том речь тут шла
                      Ответить
                      • вы мудак. простите, не выдержал. Проще чем что-то объяснить вам - убиться об стену....
                        PS: смотрите коммент снизу.
                        Ответить
                        • вот из-за таких уродов и истеричек и нет желание что-то разъяснять
                          пошел ты нахрен баран (тоже не сдержался)
                          Ответить
                          • как хотите) я просто как-то не привык для сравнивания строк сначало перегонять их в object, а потом сравнивать. Но видемо как и у автора вашего кода, так и у вас дают знать о себе индуские корни.... упаси меня Бог поддерживать проекты, написаные подобными вам.

                            [надежда]
                            замените в вашем коде object на string

                            string someText = " hello world ";

                            string s1 = someText.Trim();
                            string s2 = someText.Trim();

                            Console.WriteLine(s1 == s2);
                            Вуаля! в консоле вывело True.
                            [/надежда]
                            Ответить
                            • да вы парни оба долбаебы. хотя Nagg прав.
                              Ответить
                • повторюсь http://blogs.gotdotnet.ru/personal/olegufaev/PermaLink.aspx?guid=b633f670-cf84-4c43-87cc-30d7d7a58b7c авось пригодится в жизни
                  Ответить
                  • Там зачем то стринги в object кастят, у которого == - сравнивание ссылок, автор кода по ссылке - мудак ;]
                    Ответить
            • PS вот для Вас - http://blogs.gotdotnet.ru/personal/olegufaev/PermaLink.aspx?guid=b633f670-cf84-4c43-87cc-30d7d7a58b7c
              Ответить
              • У автора этого блога проблема не со сравнением строк, а с пониманием своих действий. Со строками всё как раз хорошо.
                Ответить
      • ещё лучше заюзать unsafe code - указатели. так чтобы совсем доставляло...
        Ответить
    • Nagg а как рефлектором посмотреть код подскажи?
      Ответить
    • И написав ЭТО человек говорит "Я ЗНАЮ РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ"
      Ответить
    • спасибо всем! настроение с самого утра подняли :-)
      Ответить
    • static bool EqStr(string s){return s.StartsWith("STRING");}
      Ответить

    Добавить комментарий