(byte) b * b
преобразует значение первого b
в byte
(, которое является избыточным, поскольку оно уже было byte
), и умножает его на значение второго b
. , Умножение двух byte
s переводит их сначала в int
, поскольку для byte
s нет оператора *
. Следовательно, результатом является int
, и его нельзя присвоить переменной byte
.
С другой стороны, (byte)(b * b)
приводит результат умножения int
к byte
, который можно присвоить переменной byte
.
Это описано в JLS в 5.6.2. Двоичное числовое продвижение :
Когда оператор применяет двоичное числовое продвижение к паре операндов, каждый из которых должен обозначать значение, которое можно преобразовать в числовой тип, применяются следующие правила: order:
blockquote>
Если какой-либо операнд имеет ссылочный тип, он подвергается распаковке преобразования (§5.1.8).
Расширяющее примитивное преобразование (§5.1.2) применяется для преобразования одного или обоих операндов, как указано в следующих правилах:
Если любой из операндов имеет тип double, другой преобразуется в двойной.
В противном случае, если один из операндов имеет тип float, другой преобразуется в float.
В противном случае, если один из операндов имеет тип long, другой преобразуется в long.
В противном случае оба операнда преобразуются в тип int .
Проблема была в веб-сервисе, не webpart. Машина, где веб-сервис был развернут, имеет платформу 2,0 установленных. Исключение было поймано на webpart и сообщило. Спасибо всем за Ваши комментарии.
Подробно остановиться на вышеупомянутых ответах:
Это действительно кажется, что Ваш сайт работает на asp.net 2.x. Быть той Системой. ServiceModel 3.x компонент, блок не загрузится. Необходимо будет установить 3.5 на сервере, или если у Вас уже есть он, установил IIS для выполнения сайта под 3,5
Ваш веб-сайт настроен для использования ASP.NET 2.0.5.something?
Возможно, эта статья может быть полезной:
Попытайтесь установить Платформу.NET 3.5 на Вашем sharepoint сервере.
Это кажется, что сама веб-Часть была создана против более старой версии Системы. Блок ServiceModel (вероятно, бета-версия). Если у Вас есть доступ к исходному коду веб-части, необходимо перекомпилировать его против последней стабильной версии. Иначе необходимо будет найти ту же самую версию Системы. ServiceModel и регистр это в Ваш GAC.
Править: Вы могли также попытаться войти в Web.config своего веб-приложения и заменить свою Систему. Ссылка ServiceModel с этим:
<Reference Include="System.ServiceModel">
<SpecificVersion>False</SpecificVersion>
</Reference>