C# Why does '+' + a short convert to 44
I have a line of code that looks like this:
MyObject.PhoneNumber = '+' + ThePhonePrefix + TheBizNumber;
Basically, I'm creating a phone number in E164 format and then I assign that string to a string property of an object. ThePhonePrefix is a short that holds the international phone prefix and TheBizNumber is a string that holds the phone number digits.
Why didn't the compiler bug when I was concatenating a short in the string in the first place? And then why does '+' + 1 equal 44?? This was a pretty hard bug to track because there was no compile error and 44 is the phone prefix for the UK so everything "looked" like it was working because the client-side code just saw a UK number. Why 44?
Thanks.
Answer:
Why didn't the compiler bug when I was concatenating a short in the string in the first place?
String concatenation using +
sign
internally calls string.Concat
,
which internally calls ToString
on
each parameter. Hence no error.
why does '+' + 1
You are doing character/numeric arithmetic. 43
being
value of +
and
short/int 1
is
44.
Because of operator + associativity from left to right it is first character/numeric addition and then string concatenation.
So it is like:
MyObject.PhoneNumber = ('+' + ThePhonePrefix) + TheBizNumber;
You can use "+"
to
mark it as a string or explicitly call String.Concat
like:
var result = string.Concat('+', ThePhonePrefix, TheBizNumber);
website:http://stackoverflow.com/questions/29397495/why-does-a-short-convert-to-44