Это на самом деле зависит от Вашего внешнего компонента. При ссылке на внешний компонент в приложении.NET, это генерирует GUID для идентификации того компонента. Эта ошибка происходит, когда внешний компонент, на который ссылается один из Ваших проектов, имеет то же имя и но различная версия как другой такой компонент в другом блоке.
Это иногда происходит, когда Вы используете "Обзор", чтобы найти ссылки и добавить неверную версию блока, или у Вас есть различная версия компонента в Вашем репозитории кода как тот, который Вы установили в локальной машине.
Действительно пытаются найти, какие проекты имеют эти конфликты, удаляют компоненты из списка ссылок, затем добавьте их снова удостоверяющийся, что Вы указываете на тот же файл.
Соответствующая строка в 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 (объектом), вы ' у меня есть внутр.
В отличие от большинства других методов расширения LINQ, Cast
расширяет неуниверсальный ] IEnumerable
, а не IEnumerable
.
Это означает, что значения int
, сгенерированные вызовом Range
, упаковываются Приведение
вызывает базовый перечислитель, который затем пытается преобразовать их в long
и терпит неудачу, поскольку значения можно распаковать только в один и тот же тип.
Вы можете имитировать такое же поведение исключения во втором цикле, явно поместив значения int
в рамку:
foreach (var item in Enumerable.Range(0, 10).Select(i => (long)(object)i))
{
Console.WriteLine(item);
}
Также стоит отметить сеансы PHP, session_unset ()
> session_destroy ()
; Не знаю почему. После прочтения записи руководства PHP в session_destroy ()
кажется, что она удаляет только данные в текущем контексте, а не фактически удаляет их из плоского файла сеанса, поэтому, если вы не очистили cookie, вы можете получить его обратно. Это кажется в высшей степени нелогичным (как часто бывает с PHP), и, возможно, именно поэтому я много лет назад решил (а затем сразу забыл о причине) всегда использовать session_unset ()
вместо session_destroy ()
.
Также убедитесь, что ваше перенаправление происходит после того, как вы выполняете всю эту бессмысленную сессию, поскольку PHP действует способами, которых не ожидают все разработчики. Лучшая практика, IMO, - следовать каждому заголовку ('Location: ...