উত্তর:
যদি আপনি একটি স্ট্রিং পেয়ে থাকেন এবং আপনি এটি সর্বদা পূর্ণসংখ্যা হিসাবে প্রত্যাশা করেন (বলুন, যদি কোনও ওয়েব পরিষেবা আপনাকে স্ট্রিং ফর্ম্যাটে কোনও পূর্ণসংখ্যার হাত দিচ্ছে) তবে আপনি ব্যবহার করতে পারবেন Int32.Parse()
।
আপনি যদি কোনও ব্যবহারকারীর কাছ থেকে ইনপুট সংগ্রহ করছেন তবে আপনি সাধারণত ব্যবহার করতেন Int32.TryParse()
, যেহেতু এটি যখন ব্যবহারকারী অবৈধ ইনপুট প্রবেশ করে তখন আপনাকে পরিস্থিতিটির উপর আরও সূক্ষ্ম নিয়ন্ত্রণের অনুমতি দেয়।
Convert.ToInt32()
কোনও বস্তুকে এর যুক্তি হিসাবে গ্রহণ করে। (এটি কীভাবে কাজ করে তার জন্য ক্রিস এস এর উত্তর দেখুন)
Convert.ToInt32()
ArgumentNullException
যখন তার যুক্তিটি নাল হয় তখনও নিক্ষেপ করে না Int32.Parse()
। এর অর্থ Convert.ToInt32()
হ'ল এটি সম্ভবত একটি ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে কম Int32.Parse()
, যদিও বাস্তবে আপনি যদি একটি লুপে খুব বড় সংখ্যক পুনরাবৃত্তি না করেন তবে আপনি এটি কখনই লক্ষ্য করবেন না।
ToInt32
পদ্ধতিটিতে প্রচুর পরিমাণের বোঝার জন্য একটি ওভারলোড রয়েছে System.String
, সেগুলির মধ্যে রয়েছে, টাইপটি সনাক্ত করে কোনও সময় হারাবে না। আসল কোডটি শূন্য মানগুলির int.Parse(value, CultureInfo.CurrentCulture)
জন্য এবং সমস্ত কিছুর জন্য 0 প্রদান ছাড়া আর কিছুই করে না ।
Int32.TryParse()
মধ্যে Convert.ToInt32()
কারণ এটি ভুল। স্ট্রিংটি ভুলভাবে ফর্ম্যাট করা থাকলে রূপান্তর একটি ব্যতিক্রম ছোঁড়ে।
প্রতিবিম্বকে দেখুন:
int.Parse ( "32"):
public static int Parse(string s)
{
return System.Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.CurrentInfo);
}
যা একটি কল:
internal static unsafe int ParseInt32(string s, NumberStyles style, NumberFormatInfo info)
{
byte* stackBuffer = stackalloc byte[1 * 0x72];
NumberBuffer number = new NumberBuffer(stackBuffer);
int num = 0;
StringToNumber(s, style, ref number, info, false);
if ((style & NumberStyles.AllowHexSpecifier) != NumberStyles.None)
{
if (!HexNumberToInt32(ref number, ref num))
{
throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
}
return num;
}
if (!NumberToInt32(ref number, ref num))
{
throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
}
return num;
}
Convert.ToInt32 ( "32"):
public static int ToInt32(string value)
{
if (value == null)
{
return 0;
}
return int.Parse(value, CultureInfo.CurrentCulture);
}
যেমনটি প্রথম (ডেভ এম এর) মন্তব্য বলেছে।
Convert.ToInt32
ফেরত । 0
null
int.Parse
ArgumentNullException
default(int)
সংকলন সময়ে এই অভিব্যক্তিটি মূল্যায়ন করা হয়, যেহেতু এটির একটি অন্তর্নিহিত মূল্য - অভিব্যক্তিটির ফলাফল 0
, সুতরাং সংকলকটি একটি আক্ষরিক সন্নিবেশ করায় 0
। আইএল বিযুক্তকরণ সরঞ্জামগুলি এর চেয়ে ভাল আরও কিছু জানতে পারে না, সুতরাং তারা আপনাকে কেবল আক্ষরিক শূন্য দেখায়।
যেমন কোন পার্থক্য। অভ্যন্তরীণ
Convert.ToInt32()
কলint.Parse()
যুক্তি থাকলে একটি জিনিস Convert.ToInt32()
ফিরে আসে0
null
অন্যথায় উভয়ই একইভাবে কাজ করে
Convert.ToInt32(string)
কল int.Parse
। Convert.ToInt32(object)
যাইহোক, কল ((IConvertible) value).ToInt32
, যা ক্ষেত্রে string
কল Convert.ToInt32(string)
... একটি বিট সংবর্ত ...
এই কোডটি নীচে চেষ্টা করুন .....
class Program
{
static void Main(string[] args)
{
string strInt = "24532";
string strNull = null;
string strWrongFrmt = "5.87";
string strAboveRange = "98765432123456";
int res;
try
{
// int.Parse() - TEST
res = int.Parse(strInt); // res = 24532
res = int.Parse(strNull); // System.ArgumentNullException
res = int.Parse(strWrongFrmt); // System.FormatException
res = int.Parse(strAboveRange); // System.OverflowException
// Convert.ToInt32(string s) - TEST
res = Convert.ToInt32(strInt); // res = 24532
res = Convert.ToInt32(strNull); // res = 0
res = Convert.ToInt32(strWrongFrmt); // System.FormatException
res = Convert.ToInt32(strAboveRange); //System.OverflowException
// int.TryParse(string s, out res) - Test
bool isParsed;
isParsed = int.TryParse(strInt, out res); // isParsed = true, res = 24532
isParsed = int.TryParse(strNull, out res); // isParsed = false, res = 0
isParsed = int.TryParse(strWrongFrmt, out res); // isParsed = false, res = 0
isParsed = int.TryParse(strAboveRange, out res); // isParsed = false, res = 0
}
catch(Exception e)
{
Console.WriteLine("Check this.\n" + e.Message);
}
}
পার্থক্যটি হ'ল:
Int32.Parse()
এবং Int32.TryParse()
শুধুমাত্র স্ট্রিং রূপান্তর করতে পারে। Convert.ToInt32()
প্রয়োগকারী যে কোনও ক্লাস নিতে পারে IConvertible
। যদি আপনি এটি একটি স্ট্রিং পাস করেন, তবে সেগুলি সমতুল্য, আপনি তুলনা ইত্যাদির জন্য অতিরিক্ত ওভারহেড পাবেন ইত্যাদি যদি আপনি স্ট্রিংকে রূপান্তর করছেন তবে TryParse()
সম্ভবত এটিই সর্বোত্তম বিকল্প।
ট্রাইপার্স দ্রুত ...
পার্সে এই ফাংশনগুলির মধ্যে প্রথমটি হ'ল যে কোনও। নেট বিকাশকারীদের সাথে পরিচিত হওয়া উচিত। এই ফাংশনটি একটি স্ট্রিং নেবে এবং এর থেকে পূর্ণসংখ্যা বের করার এবং পরে পূর্ণসংখ্যা ফেরত দেওয়ার চেষ্টা করবে। যদি এটি এমন কোনও কিছুতে চলে যায় যা এটি বিশ্লেষণ করতে পারে না তবে এটি একটি ফর্ম্যাটেক্সপশন নিক্ষেপ করে বা যদি সংখ্যাটি খুব বেশি হয় তবে একটি ওভারফ্লো এক্সেপশন। এছাড়াও, আপনি যদি এটি একটি নাল মান পাস করেন তবে এটি একটি আর্গুমেন্টএক্সেপশন নিক্ষেপ করতে পারে।
ট্রিপ পার্সে নতুন। নেট 2.0 ফ্রেমওয়ার্কে একটি নতুন সংযোজন যা মূল পার্স ফাংশন সহ কিছু সমস্যা সম্বোধন করে। মূল পার্থক্যটি হ'ল ব্যতিক্রম হ্যান্ডলিং খুব ধীর, সুতরাং ট্রাই পার্সে স্ট্রিংটিকে পার্স করতে না পারলে পার্সের মতো ব্যতিক্রম ছুঁড়ে না ফেলে। পরিবর্তে, এটি একটি বুলিয়ান ফিরিয়ে দেয় যা নির্দেশ করে যে এটি কোনও সংখ্যাকে সফলভাবে পার্স করতে সক্ষম হয়েছিল কিনা। সুতরাং আপনাকে দুটি স্ট্রিংকে পার্স করতে হবে এবং পূরণ করার জন্য একটি ইন্টার 32 আউট প্যারামিটার উভয়কেই পাস করতে হবে Try ট্রাইপার্স এবং পার্সের উভয় ক্ষেত্রে যেখানে স্ট্রিংকে সঠিকভাবে পার্স করা যায় এবং যেখানে ক্ষেত্রে স্ট্রিংটি পার্স করতে পারে তার জন্য আমরা প্রোফাইলার ব্যবহার করব where স্ট্রিংটি সঠিকভাবে পার্স করা যায় না।
রূপান্তর শ্রেণিতে একটি বেস শ্রেণিকে অন্যে রূপান্তর করতে ক্রিয়াকলাপগুলির একটি সিরিজ রয়েছে। আমি বিশ্বাস করি যে রূপান্তর করুন। টুআইন্ট 32 (স্ট্রিং) কেবল একটি নাল স্ট্রিংয়ের জন্য পরীক্ষা করে (যদি স্ট্রিংটি পার্সের বিপরীতে শূন্যটি ফিরে আসে) তবে কেবল ইনট 32 কে কল করুন string পার্স (স্ট্রিং)। আমি এটি নিশ্চিত করতে এবং পার্সের বিপরীতে রূপান্তর ব্যবহার করা পারফরম্যান্সের কোনও সত্যিকারের প্রভাব ফেলে কিনা তা দেখতে প্রোফাইলার ব্যবহার করব।
আশাকরি এটা সাহায্য করবে.
Int32.parse (STRING) --->
ইন্ট 32. পার্স (স্ট্রিং) পদ্ধতি কোনও সংখ্যার স্ট্রিং প্রতিনিধিত্বকে তার 32-বিট স্বাক্ষরিত পূর্ণসংখ্যার সমতুল্যে রূপান্তর করে। S যখন নাল রেফারেন্স হয় তখন এটি আর্গুমেন্টনাল এক্সসেপশন নিক্ষেপ করবে। গুলি যদি পূর্ণসংখ্যার মান ব্যতীত অন্য হয় তবে এটি ফর্ম্যাটেক্সেপশন নিক্ষেপ করবে। S যখন MinValue এর চেয়ে কম বা ম্যাক্সালিউয়ের চেয়ে বড় সংখ্যার প্রতিনিধিত্ব করে, তখন এটি ওভারফ্লো এক্সেকসেপশন নিক্ষেপ করবে। উদাহরণস্বরূপ :
string s1 = "1234";
string s2 = "1234.65";
string s3 = null;
string s4 = "123456789123456789123456789123456789123456789";
result = Int32.Parse(s1); //1234
result = Int32.Parse(s2); //FormatException
result = Int32.Parse(s3); //ArgumentNullException
result = Int32.Parse(s4); //OverflowException
রূপান্তর করুন.টোইন্ট 32 (স্ট্রিং) -> রূপান্তর করুন.টোইন্ট 32 (স্ট্রিং) পদ্ধতি 32-বিট স্বাক্ষরিত পূর্ণসংখ্যার সমতুল্যের নির্দিষ্ট স্ট্রিং প্রতিনিধিত্বকে রূপান্তর করে। এটি পরিবর্তে Int32. পার্স () পদ্ধতিতে কল করে। S যখন নাল রেফারেন্স হয়, তখন এটি ArgumentNullException নিক্ষেপের পরিবর্তে 0 প্রদান করবে। গুলি যদি পূর্ণসংখ্যার মান ব্যতীত অন্য হয় তবে এটি ফর্ম্যাটেক্সেপশন নিক্ষেপ করবে। S যখন MinValue এর চেয়ে কম বা ম্যাক্সালিউয়ের চেয়ে বড় সংখ্যার প্রতিনিধিত্ব করে, তখন এটি ওভারফ্লো এক্সেকসেপশন নিক্ষেপ করবে।
উদাহরণ স্বরূপ:
result = Convert.ToInt32(s1); // 1234
result = Convert.ToInt32(s2); // FormatException
result = Convert.ToInt32(s3); // 0
result = Convert.ToInt32(s4); // OverflowException
Convert.ToInt32
19 টি ওভারলোড বা 19 টি বিভিন্ন উপায়ে রয়েছে যা আপনি এটি কল করতে পারেন। 2010 সংস্করণে আরও বেশি হতে পারে।
এটি নিম্নলিখিত ধরণগুলি থেকে রূপান্তর করার চেষ্টা করবে;
অবজেক্ট, বুলিয়ান, চর, এসবাইট, বাইট, ইন্ট 16, ইউআইএনটি 16, ইন্ট 32, ইউআইএনটি 32, ইন্ট 64, ইউআইএন 64, একক, ডাবল, দশমিক, স্ট্রিং, তারিখ
এবং এটির অন্যান্য পদ্ধতিও রয়েছে; একটিতে একটি সংখ্যা বেস এবং 2 পদ্ধতিতে জড়িত একটিSystem.IFormatProvider
অন্যদিকে পার্সে কেবল 4 টি ওভারলোড বা 4 টি বিভিন্ন উপায় রয়েছে যাতে আপনি পদ্ধতিটিকে কল করতে পারেন।
Integer.Parse( s As String)
Integer.Parse( s As String, style As System.Globalization.NumberStyles )
Integer.Parse( s As String, provider As System.IFormatProvider )
Integer.Parse( s As String, style As System.Globalization.NumberStyles, provider As System.IFormatProvider )
এটি প্যারামিটারের ধরণের উপর নির্ভর করে। উদাহরণস্বরূপ, আমি সবেমাত্র আবিষ্কার করেছি যে এটি একটি চরকে এর ASCII মান ব্যবহার করে সরাসরি INT তে রূপান্তর করবে। ঠিক আমি যে কার্যকারিতাটি চেয়েছিলাম তা নয় ...
তোমাকে সতর্ক করা হল!
public static int ToInt32(char value)
{
return (int)value;
}
Convert.ToInt32('1'); // Returns 49
int.Parse('1'); // Returns 1
char
তে অন্তর্নিহিত রূপান্তর করতে পারেন string
? এটা অবশ্যই VB.NET মধ্যে, এবং তাই সেই ভাষায় প্রোগ্রামারদের সম্ভবত আশা করতে পারেন হবে Convert.ToInt32("1"c)
এবং Convert.ToInt32("1")
সমতুল্য হতে পারে, কিন্তু আমি মনে করি না C # এর যে অন্তর্নিহিত রূপান্তর হয়েছে না।
char
মানগুলি ভিবিএনটের চেয়ে কিছুটা বেশি নম্বর-ইশ হিসাবে বিবেচনা করে। বিপদ vb.net, যেখানে সেখানে তার মাঝে একটি অনুভূত পার্থক্য কম কারণ একটি অন্তর্নিহিত ঢালাই মধ্যে বৃহত্তর হবে Char
এবং String
।
এর জন্য int.Parse
এবং এর জন্য এখানে বিশদ রয়েছে Convert.ToInt32
: বলুন, আপনার কাছে একটি চর অ্যারে রয়েছে char[] a=['1','2','3','4']
এবং প্রতিটি উপাদানকে পূর্ণসংখ্যায় রূপান্তর করতে চান। এটি Convert.ToInt32(a[0])
আপনাকে 49 নম্বর দেবে It এটি এএসসিআইআই কোড হিসাবে বিবেচনা করে The int.Parse(a[0])
আপনাকে সঠিক আউটপুট দেবে যা 1
আপনি একটি স্ট্রিং অ্যারে যদি string[] b=['1','2','3','4']
, তারপর Convert.ToInt32
এবং int.Parse
আউটপুটে কোন পার্থক্য থাকবে না। উভয়ই সঠিক পূর্ণসংখ্যা ফেরত দেয়।
রূপান্তর করুন। টুআইন্ট 32 নাল মানকে অনুমতি দেয়, এটি কোনও ত্রুটি ফেলে না ইন্ট.পার্স নাল মানকে অনুমতি দেয় না, এটি একটি আর্গুমেন্টনাল এক্সসেপশন ত্রুটি নিক্ষেপ করে।
স্পষ্টকরণের জন্য ওপেন কনসোল অ্যাপ্লিকেশনটির জন্য, কেবল কোডের নীচে অনুলিপি করুন এবং এটি static void Main(string[] args)
পদ্ধতিতে পেস্ট করুন , আমি আশা করি আপনি বুঝতে পারবেন
public class Program
{
static void Main(string[] args)
{
int result;
bool status;
string s1 = "12345";
Console.WriteLine("input1:12345");
string s2 = "1234.45";
Console.WriteLine("input2:1234.45");
string s3 = null;
Console.WriteLine("input3:null");
string s4 = "1234567899012345677890123456789012345667890";
Console.WriteLine("input4:1234567899012345677890123456789012345667890");
string s5 = string.Empty;
Console.WriteLine("input5:String.Empty");
Console.WriteLine();
Console.WriteLine("--------Int.Parse Methods Outputs-------------");
try
{
result = int.Parse(s1);
Console.WriteLine("OutPut1:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut1:"+ee.Message);
}
try
{
result = int.Parse(s2);
Console.WriteLine("OutPut2:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut2:" + ee.Message);
}
try
{
result = int.Parse(s3);
Console.WriteLine("OutPut3:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut3:" + ee.Message);
}
try
{
result = int.Parse(s4);
Console.WriteLine("OutPut4:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut4:" + ee.Message);
}
try
{
result = int.Parse(s5);
Console.WriteLine("OutPut5:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut5:" + ee.Message);
}
Console.WriteLine();
Console.WriteLine("--------Convert.To.Int32 Method Outputs-------------");
try
{
result= Convert.ToInt32(s1);
Console.WriteLine("OutPut1:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut1:" + ee.Message);
}
try
{
result = Convert.ToInt32(s2);
Console.WriteLine("OutPut2:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut2:" + ee.Message);
}
try
{
result = Convert.ToInt32(s3);
Console.WriteLine("OutPut3:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut3:" + ee.Message);
}
try
{
result = Convert.ToInt32(s4);
Console.WriteLine("OutPut4:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut4:" + ee.Message);
}
try
{
result = Convert.ToInt32(s5);
Console.WriteLine("OutPut5:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut5:" + ee.Message);
}
Console.WriteLine();
Console.WriteLine("--------TryParse Methods Outputs-------------");
try
{
status = int.TryParse(s1, out result);
Console.WriteLine("OutPut1:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut1:" + ee.Message);
}
try
{
status = int.TryParse(s2, out result);
Console.WriteLine("OutPut2:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut2:" + ee.Message);
}
try
{
status = int.TryParse(s3, out result);
Console.WriteLine("OutPut3:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut3:" + ee.Message);
}
try
{
status = int.TryParse(s4, out result);
Console.WriteLine("OutPut4:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut4:" + ee.Message);
}
try
{
status = int.TryParse(s5, out result);
Console.WriteLine("OutPut5:" + result);
}
catch (Exception ee)
{
Console.WriteLine("OutPut5:" + ee.Message);
}
Console.Read();
}
}
পার্স () পদ্ধতিগুলি এমন শৈলীর সংখ্যা সরবরাহ করে যা রূপান্তর () এর জন্য ব্যবহার করা যায় না। উদাহরণ স্বরূপ:
int i;
bool b = int.TryParse( "123-",
System.Globalization.NumberStyles.AllowTrailingSign,
System.Globalization.CultureInfo.InvariantCulture,
out i);
পেছনের চিহ্ন সহ সংখ্যাগুলি বিশ্লেষণ করবে যাতে i == -123
পিছনের চিহ্নটি ইআরপি সিস্টেমে জনপ্রিয়।