Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему IndexOf не дает исключения? 
V
    Опции темы
Pankon
Дата 13.2.2008, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: 3
Всего: 5



Почему IndexOf не дает исключения?

В MSDN написано: IndexOf дает исключение, если 
Цитата

startIndex specifies a position not within this instance.
startIndex  - это второй аргумент

Проверяем
Код

                string tag = "r";
                string source = "rw";
                int res0 = source.IndexOf(tag, 0);
                int res1 = source.IndexOf(tag, 1);
                int res2 = source.IndexOf(tag, 2);

Строка source содержит два символа, казалось бы, что  int res2 = source.IndexOf(tag, 2);  должно давать исключение, но этого не проиходит, а вот char charRes = source[2]; как и положено дает IndexOutOfRangeException


ПС. Все это конечно не очень принципиально, но хотелось бы понять, какая (официальная MS)идея скрыта за такой реализацией.
PM MAIL   Вверх
Ctrl
Дата 13.2.2008, 18:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 12.2.2008
Где: Tula

Репутация: 6
Всего: 7



Куда пропадает твой эксепшн, можно понять поэтапно анализируя код этой самой функции IndexOf.

Этап 1: System.String.IndexOf(string value, int startIndex)
Код

public int IndexOf(string value, int startIndex)
{
    return CultureInfo.CurrentCulture.CompareInfo.IndexOf(this, value, startIndex);
}

Тут вроде все путем..

Этап 2: System.Globalization.CompareInfo.IndexOf(string source, string value, int startIndex)
Код

public virtual int IndexOf(string source, string value, int startIndex)
{
    if (source == null)
    {
        throw new ArgumentNullException("source");
    }
    return this.IndexOf(source, value, startIndex, source.Length - startIndex, CompareOptions.None);
}

Вот первый эксепшн - нулреференс. (Обрати внимание на выражение source.Length - startIndex)

Этап 3: System.Globalization.CompareInfo.IndexOf(string source, string value, int startIndex, int count, CompareOptions options)
 
Код

public virtual unsafe int IndexOf(string source, string value, int startIndex, int count, CompareOptions options)
{
//... всякая фигня 
  if ((count < 0) || (startIndex > (source.Length - count)))
    {
        throw new ArgumentOutOfRangeException("count", Environment.GetResourceString("ArgumentOutOfRange_Count"));
    }
//... опять всякая фигня 
}

Вот тут и видим - эксепшна НЕТУ!! т.к.  count не меньше нуля и позиция(startIndex) не выходит за границы (startIndex > (source.Length - count)!!!

Т.е. никакого OutOfRange нет,что и требовалось доказать!!!
PM MAIL ICQ   Вверх
tol05
Дата 13.2.2008, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



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


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
1stain
Дата 13.2.2008, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 8
Всего: 40



может это было сделано, исходя из логики, что начиная с  позиции равной Length находится подстрока String.Empty.


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
tol05
Дата 14.2.2008, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



скорее символ окончания строки... Но практической ценности в этом я не вижу.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Pankon
Дата 14.2.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: 3
Всего: 5



Цитата(tol05 @  13.2.2008,  18:56 Найти цитируемый пост)
нестыковка описания и реализаций
 - закрываю тему

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0652 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.