Quel est le problème avec cette expression? Impossible de convertir implicitement le type 'int' en 'byte'
J'obtiens l'erreur "Impossible de convertir implicitement le type 'int' à 'octet'. Une conversion explicite existe (vous manque un plâtre?)". Ne pas byte + byte = byte
? Aussi je remarque que lorsque je supprime les +rgb.Green
il fonctionne
//rgb.Red, rgb.Green, rgb.Blue are byte types
//h, delta are double
rgb.Red = Convert.ToByte(Math.Round((h - 4) * delta)) + rgb.Green;
public struct RGBColor
{
public byte Red { get; set; }
public byte Green { get; set; }
public byte Blue { get; set; }
}
source d'informationauteur Jiew Meng
Vous devez vous connecter pour publier un commentaire.
Non, parce qu'il peut déborder (> 255), c'est pourquoi cette opération retourne un Int32. Vous pourriez lancer à nouveau le résultat de octet à vos propres risques.
L'ajout de deux octets produit d'un nombre entier en C#. Convertir l'intégralité de la chose en retour à un octet.
Voir octet + octet = int... pourquoi? pour plus d'informations.
http://msdn.microsoft.com/en-us/library/5bdb6693(SV.71).aspx
octet + octet = int
Plus précisément cadre n'a pas de définir l'opérateur + sur l'octet, mais il y a une conversion implicite à partir de l'octet de type int, à
octet + octet = int + int = int
Je n'ai pas tout à fait d'accord avec la justification de ce qu'il peut déborder, depuis donc peut int + int. Mais évidemment octet de l'arithmétique est bien plus "dangereux" à cet égard, et ce comportement vous oblige à regarder de plus près ce que vous faites.
C# s'élargit tous les opérandes de
int
avant de faire de l'arithmétique sur eux. De sorte que vous aurez besoin de jeter en arrière pour l'octet de manière explicite.http://msdn.microsoft.com/en-us/library/5bdb6693(SV.80).aspx
Reportez-vous Conversion Implicite la section dans ce https://msdn.microsoft.com/en-us/library/ms173105.aspx
Maintenant, pour en venir à votre exemple évidemment octet + octet n'est pas nécessairement un octet. Donc octet+octet peut être de type int. Dans ce cas, "la Conversion Implicite" ne tient pas car vers le haut de la coulée est possible de ne pas vice-versa, qui est de type int peut être converti à la longue, octet peut être converti en int.
Si dans votre cas, vous avez besoin d'une conversion explicite. Le compilateur a besoin de vous pour effectuer cette.
Reportez-vous conversion explicite dans la même page.
donc, pour votre exemple
Cela vous permettra de transformer int byte explicitement.