Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Эксперт .NET
4341 / 2003 / 387
Регистрация: 27.03.2010
Сообщений: 5,460
Записей в блоге: 1
1

Две одинаковые строки не распознаются, как одинаковые. Такое возможно? Скриншот дебага прилагается.

09.05.2011, 20:41. Показов 3102. Ответов 9
Метки нет (Все метки)

Пишу программу, начал тестировать, проходить всё пошагово (пишущийся в данный момент функционал). В одном месте в коде сравниваю тексты.

Есть TabControl сканирую целевую папку в которой другие папки, а в них треки. Вот каждая папка "рождает" новый TabItem и даёт ему своё название. Потом я записываю песни и с пути до песни получаю название папки в которой лежит эта песня. В итоге в любом случае это название совпадёт с названием одной из вкладок. И если название совпадает переключаю эту вкладку, чтобы пользователь видел, что сейчас будет воспроизведено. Но почему-то найдя одинаковое название моя программа считает, что название вовсе не одинаковое.

Вот скриншот сделанный при пошаговой отладке. На нём прекрасно видно, что 2 одинаковые строки возвращают false после их сравнения. Ничего не понимаю.
1
Миниатюры
Две одинаковые строки не распознаются, как одинаковые. Такое возможно? Скриншот дебага прилагается.  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2011, 20:41
Ответы с готовыми решениями:

Как могут быть две одинаковые строки не равны!?
Здравствуйте. Я наверно сегодня уже переработал потому, что творятся странные вещи. ...

INSERT добавляет в таблицу две одинаковые строки
DT.Clear() 'Очищаем таблицу SqlCom = New OleDb.OleDbCommand("INSERT INTO (, , , , )...

Проверить две строки на одинаковые символы и занести их в третью
Привет! Нужна помощь в создании программы, которая проверяет две строки на одинаковые символы и...

Если две строки одинаковые по длине то вывести Yes иначе No
Пользователь вводит две строки если они одинаковые по длине то тогда программа выводит Yes иначе No

9
310 / 248 / 44
Регистрация: 06.12.2010
Сообщений: 527
09.05.2011, 20:45 2
Покажи код что ли,мало ли,что там.
0
гроза ленивых студентов
453 / 408 / 51
Регистрация: 27.03.2011
Сообщений: 823
09.05.2011, 20:46 3
О_о
у меня TabControl не знает такой штуки как Items (знает TabPages), а каждый TabPage не знает свойства Header...ты ничего не напутал?
0
Эксперт .NET
4341 / 2003 / 387
Регистрация: 27.03.2010
Сообщений: 5,460
Записей в блоге: 1
09.05.2011, 20:48  [ТС] 4
Цитата Сообщение от znake Посмотреть сообщение
у меня TabControl не знает такой штуки как Items (знает TabPages), а каждый TabPage не знает свойства Header...ты ничего не напутал?
Это WPF
1
634 / 495 / 77
Регистрация: 28.07.2010
Сообщений: 895
09.05.2011, 20:48 5
Возможно разные кодировки. Попробуйте циклом посимвольно сравнить. Вот ф-ция:
C#
1
2
3
4
5
6
7
bool cmpstr(string s1, string s2)
{
    if (s1.Length != s2.Length) return false;
    bool res = true;
    for (int i = 0; i < s1.Length; ++i) res = res && (s1[i] == s2[i]);
    return res;
}
PS Или попробуйте так сравнить:
C#
1
if (str.Equals(item.Header)) /*...*/
0
310 / 248 / 44
Регистрация: 06.12.2010
Сообщений: 527
09.05.2011, 20:48 6
Casper-SC, Форум программистов > .NET > C# для начинающих

Вам в другой раздел нужно было.
0
Эксперт .NET
4341 / 2003 / 387
Регистрация: 27.03.2010
Сообщений: 5,460
Записей в блоге: 1
09.05.2011, 20:52  [ТС] 7
Цитата Сообщение от umnick_kh Посмотреть сообщение
Покажи код что ли,мало ли,что там.
Вроде же на скриншоте видно всё, что нужно. Просто я и не знаю, что там показывать то.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
        //Происходит при окончании записи одной из радиостанций
        void RadioRecManager_EndRecordStation(object sender, RecordedTracksEventArgs args)
        {
            BaseRecordableStation recStation = (BaseRecordableStation)sender;
            switch (recStation.ProfileRec.ActionAfterRecording)
            {
                case EActionAfterRecording.TurnOffComputer: WinPower.Shutdown();
                    break;
                case EActionAfterRecording.ToHibernate: WinPower.ToHibernate();
                    break;
                case EActionAfterRecording.PlayRecordedTracks:
                    {
                        Dispatcher.Invoke(new Action(() =>
                        {
                            btnRecorded_Checked(btnRecorded, new RoutedEventArgs());
                        }));
                        AudioTrack[] tracks = new AudioTrack[args.RecordedTracks.Length];
                        bassPlayer.PlayList.Clear();
                        for (int i = 0; i < tracks.Length; i++)
                        {
                            tracks[i] = new AudioTrack(new Uri(args.RecordedTracks[i]));
                            bassPlayer.PlayList.Add(tracks[i]);
                        }
 
                        Dispatcher.Invoke(new Action(() =>
                        {
                            foreach (TabItem item in tabControlTraks.Items)
                            {
//Знаю, надо две строки, что ниже, вынести из цикла, не заметил сразу.
                                String str2 = Path.GetDirectoryName(args.RecordedTracks[0]); 
                                String str = Path.GetFileName(str2); //Получить имя папки
                                if (item.Header == str)
                                {
                                    tabControlTraks.SelectedItem = item;
                                }
                            }
                        }));
                        bassPlayer.Play();
                    }
                    break;
                case EActionAfterRecording.DoNothing:
                    break;
                default:
                    break;
            }
        }
Добавлено через 2 минуты
Цитата Сообщение от umnick_kh Посмотреть сообщение
Casper-SC, Форум программистов > .NET > C# для начинающих
Вам в другой раздел нужно было.
Да вроде вопрос не слишком сложен. А тот факт, что я пишу WPF проект, на вопросе мало отражается.
1
Почетный модератор
Эксперт .NET
8699 / 3651 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
09.05.2011, 20:52 8
Casper-SC, а у тебя разве студия не подчеркивает
C#
1
if (item.Header == str) {
? У меня в VS 2010 такой error:
Warning 1 Possible unintended reference comparison; to get a value comparison, cast the left hand side to type 'string'
Получается ты сравниваешь не значения а ссылки.

Так попробуй:
C#
1
if ((string)item.Header == str) {
А вообще я бы так сделал:
C#
1
if (string.Equals((string)item.Header, str, StringComparison.CurrentCultureIgnoreCase)) {
1
гроза ленивых студентов
453 / 408 / 51
Регистрация: 27.03.2011
Сообщений: 823
09.05.2011, 20:53 9
все гораздо проще...ты сравниваешь object и string...
C#
1
2
3
4
//сделай
if ((string)item.Header == str)
//либо
if (item.Header.ToString() == str)
1
Эксперт .NET
4341 / 2003 / 387
Регистрация: 27.03.2010
Сообщений: 5,460
Записей в блоге: 1
09.05.2011, 20:57  [ТС] 10
Цитата Сообщение от znake Посмотреть сообщение
все гораздо проще...ты сравниваешь object и string...
Да я вот после сообщения SSTREGG догадался поглядеть какого типа Header. Оказывается object

Я просто офигел с увиденного, что 2 одинаковые строки не считаются одинаковыми и сразу не сообразил посмотреть тип свойства. Спасибо всем за помощь.

Добавлено через 39 секунд
Цитата Сообщение от SSTREGG Посмотреть сообщение
Casper-SC, а у тебя разве студия не подчеркивает
Нет, почему-то не подчёркивает
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2011, 20:57

Даны две матрицы. Есть ли в них одинаковые строки?
Даны две матрицы. Есть ли в них одинаковые строки? Помогите срочно надо Пожалуйста!

Даны две строки. Определить, есть ли в них одинаковые слова
как сравнивают две строки?

Выяснить, образуют две текстовых строки одинаковые множества символов
Помогите пож-та решить выяснить, образуют две текстовых строки одинаковые множества символов

ObservableCollection<Int32[]> при работе с массивами: на выходе две одинаковые строки значений
using System; using System.Collections.Generic; using System.IO; using System.Linq; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.