Здравствуйте, vasmann, Вы писали:
S>>Всё норм, да? ; ) V>Документация с наличием свойства IsEmpty намекает что не всё норм.
Наоборот же Документация (см Remarks) не заморачивается такими мелочами.
V>Не пробовал что делает код, но судя по теме похоже выбрасывает ексепшон.
Ну таки да, но тема до конца не раскрыта.
Здравствуйте, Sinix, Вы писали:
V>>Документация с наличием свойства IsEmpty намекает что не всё норм. S>Наоборот же Документация (см Remarks) не заморачивается такими мелочами.
Здравствуйте, Sinix, Вы писали:
S>Всё норм, да? ; )
Да, это сильно. Хотя документация, точнее комментарии в сорцах, вполне доходчиво объясняет, что да как. Но что этот комментарий делает в коде и почему он не находится в секции remarks, я хз!
З.Ы. Это очередное доказательство того, что стоимость использования специализированных коллекций существенно выше, чем коллекций общего назначения. Правда есть небольшая проблема с тем, что не всегда понятно, что является специализированным, а что нет, и где тебя подстерегает такая засада
У меня в текущем проекте много структур. Правда много. Большинство из них неизменяемые, но бывают и исключения. Но все они содержат свойство IsValid, что позволяет отличить валидный экземпляр от невалидного. Да, можно сказать, что ImmutableArray.IsEmpty играет ту же самую роль, но, ИМХО, это не так. Для большинства разработчиков, и меня в том числе, foo.IsEmpty и foo.Length == 0 должны быть эквивалентными семантически, пусть и с разницей (потенциальной) с производительностью.
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, vasmann, Вы писали:
V>>Не пробовал что делает код, но судя по теме похоже выбрасывает ексепшон. S>Ну таки да, но тема до конца не раскрыта.
new ImmutableArray<int>() что ли? Но это не засада, судя по тому что
internal void ThrowNullRefIfNotInitialized()
{
int num = this.array.Length;
}
Здравствуйте, Venom, Вы писали:
V>>>Документация с наличием свойства IsEmpty намекает что не всё норм. S>>Наоборот же Документация (см Remarks) не заморачивается такими мелочами.
V>Но там ничего не написано про IsEmpty или Lenght.
Как это не написано?
ImmutableArray<T>.IsEmpty
Gets a value indicating whether this ImmutableArray<T> is empty.
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, vasmann, Вы писали:
S>>>Всё норм, да? ; ) V>>Документация с наличием свойства IsEmpty намекает что не всё норм. S>Наоборот же Документация (см Remarks) не заморачивается такими мелочами.
Не, я про то, что наличие свойства IsEmpty настораживает. Но пацаны да, решили не пояснять почему нужно это свойство а не обычное Length == 0
С этим типом не работал, потому самому интересно что с этим WTF.
Здравствуйте, SergeyT., Вы писали:
ST>Для большинства разработчиков, и меня в том числе, foo.IsEmpty и foo.Length == 0 должны быть эквивалентными семантически, пусть и с разницей (потенциальной) с производительностью.
А они и эквивалентны. IsDefault скажет что array == null.
Здравствуйте, samius, Вы писали:
ST>>Для большинства разработчиков, и меня в том числе, foo.IsEmpty и foo.Length == 0 должны быть эквивалентными семантически, пусть и с разницей (потенциальной) с производительностью. S>А они и эквивалентны. IsDefault скажет что array == null.
Точно. предыдущий комментарий сбил меня с толку и я не проверил.
Но IsDefault, ИМХО, явно не передает всей прелести ситуации. Ведь по сути, общение с экземпляром, чей IsDefault возвращает true равносильно работе с нулевой ссылкой. Но вот имя как-то не располагает к такой аналогии.
Здравствуйте, samius, Вы писали:
S>Т.е. они такое делают чуть ли не в каждом методе.
Оок, подсказка: что именно бросается при обращению к свойству .Length?
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, samius, Вы писали:
S>Оок, подсказка: что именно бросается при обращению к свойству .Length?
NullReferenceException
и?
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, SergeyT., Вы писали:
ST>>Да, это сильно. S>Это преуменьшение Я подробней распишу чуть пожже, как народ раскачается и нормально ответит.
Могу предположить что ноги растут из массива неизменяемых массивов.
IA — ImmutableArray
1. Поскольку если выделить IA<T>[] = new IA<T>[100]; Для них не вызовется конструктор и все поля будут нулами/нулями.
2. Из этого по идее следует логичное поведение new IA<T>() так же должен будет быть проинициализирован нулом.
3. Так же можно и просто описать переменную IA<T> someIa.
Соответственно внутреннее поле остается пустым до заполнения данными, плюс нету дерганья памяти для инициализации пустым массивом new T[0].
Здравствуйте, SergeyT., Вы писали:
ST>Но IsDefault, ИМХО, явно не передает всей прелести ситуации. Ведь по сути, общение с экземпляром, чей IsDefault возвращает true равносильно работе с нулевой ссылкой. Но вот имя как-то не располагает к такой аналогии.
Не передает, но намекает на default(ImmutableArray<T>). Какое бы решение выглядело лучше?
В моем проекте есть тоже структура-обертка над массивом, там я сделал IsNull. Так чуть ближе к народу, но намного ли?
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, samius, Вы писали:
S>>>Оок, подсказка: что именно бросается при обращению к свойству .Length? S>>NullReferenceException S>>и?
S>Как при таком раскладе корректно ловить ситуацию "кривой массив передали"?
.IsDefault что надо признать адски не очевидно и это надо бы красными буквами жирными выделять в документации
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, samius, Вы писали:
S>И смотрим на название топика. Как при таком раскладе корректно ловить ситуацию "кривой массив передали"?
Я думал что названия топика для того что бы гугломэйл группировал сообщения
Обычно я хожу в документацию, но там пока все плохо, значит в ILSpy. А там пока пишут, что полетит NullReferenceException в случае default. Изменится ли это — фиг знает.
Я согласен, что как-то не очень. Но как сделать лучше — с разбегу не скажу.
Здравствуйте, Sinix, Вы писали:
S>>>Наоборот же Документация (см Remarks) не заморачивается такими мелочами. V>>Но там ничего не написано про IsEmpty или Lenght. S>Как это не написано?
Ой, что-то я протупил. Просто ты указал секцию Remarks (см выделение в процитированном) и я посмотрел только там.