Счетный. Составу исполнителей <T> дополнительный метод не удается бросить от интервала до длинного, почему? [дубликат]

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

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

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

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

3 ответа

Соответствующая строка в Cast :

 this.<>2__current = (TResult)this.<obj>5__ab;

Мы можем имитировать это, используя следующий код:

int foo = 1;
long bar = Cast<long>(foo); //oh noes!

T Cast<T>(object input)
{
    return (T)input;
}

Что тоже не работает. Ключевым моментом здесь является то, что в момент применения это объект. Не инт. Это не удается, потому что мы можем распаковать только объект с точным типом , который нам нужен. Мы идем от объекта - который мог бы быть длинным, но это не так. Это заключенный в штучную форму int. Эрик Липперт обсуждал это в своем блоге :

мы решили, что распаковка может быть распакована только до определенного типа. Если вы хотите вызвать медленный метод, который делает все это, он доступен - вы всегда можете вызвать Convert ...

В вашем коде, который работает, вы не имеете дело с упакованным int (объектом), вы ' у меня есть внутр.

16
ответ дан 30 November 2019 в 12:58
поделиться

В отличие от большинства других методов расширения LINQ, Cast расширяет неуниверсальный ] IEnumerable , а не IEnumerable .

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

Вы можете имитировать такое же поведение исключения во втором цикле, явно поместив значения int в рамку:

foreach (var item in Enumerable.Range(0, 10).Select(i => (long)(object)i))
{
    Console.WriteLine(item);
}
10
ответ дан 30 November 2019 в 12:58
поделиться

Также стоит отметить сеансы PHP, session_unset () > session_destroy () ; Не знаю почему. После прочтения записи руководства PHP в session_destroy () кажется, что она удаляет только данные в текущем контексте, а не фактически удаляет их из плоского файла сеанса, поэтому, если вы не очистили cookie, вы можете получить его обратно. Это кажется в высшей степени нелогичным (как часто бывает с PHP), и, возможно, именно поэтому я много лет назад решил (а затем сразу забыл о причине) всегда использовать session_unset () вместо session_destroy () .

Также убедитесь, что ваше перенаправление происходит после того, как вы выполняете всю эту бессмысленную сессию, поскольку PHP действует способами, которых не ожидают все разработчики. Лучшая практика, IMO, - следовать каждому заголовку ('Location: ...

1
ответ дан 30 November 2019 в 12:58
поделиться
Другие вопросы по тегам:

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