下面這個代碼,呼叫他的dll時不報錯。但編譯原始碼時報錯
public static string Lrc(string sPro) {
sPro.ToUpper();
int length = sPro.Length;
byte b = 0;
string[] array = new string[length / 2];
int num;
for (int i = 0; i < length / 2; i = num + 1) {
array[i] = sPro.Substring(i * 2, 2);
b += (byte)Convert.ToUInt16(array[i], 16);
num = i;
}
b = 255 - b;
b += 1;
string text = Convert.ToString(b, 16);
bool flag = text.Length < 2;
if (flag) {
text = "0" + text;
}
return text;
}
uj5u.com熱心網友回復:
我發現這樣可以不報錯,做法對嗎?b =(byte)( 255 - b);
uj5u.com熱心網友回復:
255直接寫出來會默認成int型別,參與運算后好像有個精度優先原則(不知道是不是叫這個)是說在運算中會把所有參與運算的變數自動轉換為這些變數中精度較高的型別,所以,你的原來代碼會報錯。然后再說你不報錯的這一句,就是將提升了精度的數((255-b)型別為int)強制轉換為byte,運行不會錯,但語法角度建議只轉換255這個數字。uj5u.com熱心網友回復:
但為什么打包的dll就不報錯,不知他做了什么處理?轉載請註明出處,本文鏈接:https://www.uj5u.com/net/28032.html
標籤:C#
