Ошкор тип алмаштириш
Айрим ҳолларда типларни алмаштириш ошкор тарзда амалга оширилади. Қуйидаги ошкормас тип алмаштириш ҳолларда хатолик юзага келади:
int ни short га – маълумот йўқотилиши мумкин
int ни uint га – маълумот йўқотилиши мумкин
uint ни int га – маълумот йўқотилиши мумкин
float ни int га – маълумот йўқотилиши мумкин
ихтиёрий сонли типни char типига - маълумот йўқотилиши мумкин
decimal ни бошқа ихтиёрий сонли типга – ўнли тип бошқача ташкил қилинганлиги боис, маълумот йўқотилиши мумкин.
Бундай ҳоллар учун ошкор тип алмаштириш қўлланилади. Типик синтаксиси қуйидагича:
қабул_қилувчи =(қабул_қилувчи_типи) ифода;
long a;
int b;
a = 2300;
b = (int)a;
Бирор тип бошқасига ўтказилганда, компилятор ушбу амални бажариши лозим.
long a;
int b;
a = 2300000000;
b = (int)a;
Console.WriteLine(b);
Мана шу дастур қисми бажарилганда экранда -1994967296 сони ҳосил бўлади. Демак бу ердан кўриниб турибдики типларни алмаштирганда шу тип диапозонига тушадиган қийматларни ўтказиш зарур акс ҳолда хатолик юз беради. C# тилида checked оператори мавжуд бўлиб, стекнинг ҳолатини аниқлаш мумкин яъни хатолик юз бергани тўғрисида хабар беради.
long a;
int b;
a = 2300000;
b = checked((int)a);
Типларни алмаштириш хатоликларни ҳосил қилиши мумкинлигини инобатга олиб, хатоликларни қайта ишловчи try...catch конструкциясидан фойдаланиш ҳам мумкин. Масалан:
long a;
int b;
a = 2300000000;
try {
b = checked((int)a);
Console.WriteLine(b);
}
catch {
Console.WriteLine("Типларни алмаштирганда хатолик юз берди");
}
Қуйидаги мисолда сузувчи нуқтали типни бутун сон типига алмаштириляпти:
double d=10.23;
int i;
i = (int)(d + 2.4);
Кейинги мисолда ишорасиз бутун сон char типига ўтказилади:
ushort c = 38;
char sym = (char)c;
Console.WriteLine(sym);
Экранга ASCII кодининг 38-кодли & символи чиқарилади. Қуйидаги мисолда decimal қиймат char га ўтказилган:
decimal x = 105m;
char sim = (char) x;
Console.WriteLine(sim);// i ҳарфи ҳосил бўлади
char s = 'i';
decimal d = (decimal) s;
Console.WriteLine(d);// 105 қиймати қайтарилади
Агар ҳосил қилинган натижа, янги типга ўтказилмаса, тип алмаштириш барибир амалга оширилади. Аммо натижа кутилаётган қийматни қайтармайди. Масалан,
int i = -1;
char symbol = (char) i;
Ушбу тип алмаштириш амалга оширилмаслиги лозим. Аммо натижа сифатида ? символи қайтарилади.
Агар сонли типли қийматни ҳарфий типга ўтказиш лозим бўлса, .NET библиотекаси класслари методларидан фойдаланиш лозим. оbject класси ToString() методига эга бўлиб, ушбу амални бажариш мумкин:
int i = 10;
string s = i.ToString();
Шунингдек, ҳарфий типли қийматни сонли типга ўтказиш учун Parse() методидан фойдаланилади:
string s = 100;
int i = int.Parse(s);
Console.WriteLine(i+50);
Converter класси бир типдан иккинчи типга ўтказувчи методлардан ташкил топган бўлиб улардан қуйидагиларни келтирамиз:
|