উত্তর:
Parseযদি মানটি বিশ্লেষণ করতে না পারে তবে একটি ব্যতিক্রম ছুঁড়ে দেয়, যেখানে এটি সফল হয়েছে কিনা তা নির্দেশ করে TryParsereturnsbool
TryParseকেবল try/ catchঅভ্যন্তরীণভাবে নয় - এর পুরো বিষয়টি হ'ল এটি ব্যতিক্রম ছাড়াই বাস্তবায়ন করা হয়েছে যাতে এটি দ্রুত হয়। বাস্তবে এটি সম্ভবত কার্যকরভাবে প্রয়োগ করা হয় তা হ'ল অভ্যন্তরীণ Parseপদ্ধতিটি কল করবে TryParseএবং যদি ফিরে আসে তবে ব্যতিক্রম ছুঁড়ে ফেলবে false।
সংক্ষেপে, Parseমানটি বৈধ হবে কি না তা নিশ্চিত হয়ে ব্যবহার করুন ; অন্যথায় ব্যবহার TryParse।
যদি স্ট্রিংটিকে পূর্ণসংখ্যায় রূপান্তর করা না যায় তবে
int.Parse() একটি ব্যতিক্রম নিক্ষেপ করবেint.TryParse() মিথ্যা ফিরে আসবে (তবে একটি ব্যতিক্রম ছুঁড়ে না)ট্রাইপার্স পদ্ধতি আপনাকে কিছু পরীক্ষা করার যোগ্য কিনা তা পরীক্ষা করার অনুমতি দেয়। যদি আপনি প্রথমবারের মতো কোনও অকার্যকর int দিয়ে পার্স চেষ্টা করেন তবে ট্রাই পার্সে থাকাকালীন আপনি একটি ব্যতিক্রম পাবেন, এটি পার্সে সফল হয়েছে কিনা তা আপনাকে জানাতে একটি বুলিয়ান দেয় returns
পাদটীকা হিসাবে, বেশিরভাগ ট্রিপর্স পদ্ধতিতে বাতিল হয়ে যাওয়া ব্যতিক্রম করবে।
কোনও স্ট্রিং থেকে নির্দিষ্ট ডেটাটাইপের রূপান্তর ব্যর্থ হলে পার্স একটি ব্যতিক্রম ছুঁড়ে ফেলে, অন্যদিকে ট্রাইপার্স স্পষ্টতই একটি ব্যতিক্রম ছোঁড়া থেকে বিরত থাকে।
ট্রাইপার্স মানটি ফিরিয়ে দেয় না, এটি পার্স সফল হয়েছে কিনা তা নির্দেশ করার জন্য একটি স্ট্যাটাস কোড দেয় (এবং কোনও ব্যতিক্রম ছুঁড়ে না)।
রেকর্ডের জন্য, আমি দুটি কোড পরীক্ষা করছি: এটি কেবল স্ট্রিং থেকে একটি সংখ্যায় রূপান্তর করার চেষ্টা করে এবং যদি এটি ব্যর্থ হয় তবে সংখ্যাটি শূন্যকে নির্ধারণ করুন।
if (!Int32.TryParse(txt,out tmpint)) {
tmpint = 0;
}
এবং:
try {
tmpint = Convert.ToInt32(txt);
} catch (Exception) {
tmpint = 0;
}
সি # এর জন্য, ট্রাইপার্স ব্যবহার করা সবচেয়ে ভাল বিকল্প কারণ চেষ্টা করুন এবং ধরুন বিকল্পটি ব্যতিক্রম ছুঁড়ে ফেলুন
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
এটি বেদনাদায়ক ধীর এবং অবাঞ্ছিত, তবে, কোডটি থামবে না যতক্ষণ না ডিবাগের ব্যতিক্রম এটি বন্ধ করার জন্য নিষ্পত্তি না করা হয়।
আমি এটি একটি খুব পুরানো পোস্ট জানি কিন্তু পার্স বনাম ট্রাইপার্সে আরও কয়েকটি বিশদ ভাগ করে নেওয়ার চিন্তাভাবনা করেছি।
আমার এমন একটি দৃশ্য ছিল যেখানে ডেটটাইমকে স্ট্রিংয়ে রূপান্তর করা দরকার এবং যদি তারিখের মূল্য নাল বা স্ট্রিং empty হয় তবে আমরা একটি ব্যতিক্রম এর মুখোমুখি হয়েছি। এটি কাটিয়ে উঠতে, আমরা পার্সকে ট্রাই পার্সে প্রতিস্থাপন করেছি এবং ডিফল্ট তারিখ পাব।
পুরাতন কোড:
dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");
নতুন কোড:
DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);
আরেকটি পরিবর্তনশীল ঘোষণা করতে হবে এবং ট্রাই পার্সির জন্য আউট হিসাবে ব্যবহার করা হবে।
startDateএবং endDateযেমন DateTime.TryParseসবসময় তাদের সঙ্গে ওভাররাইট করবে DateTime.MinValue। যদি ভুল তারিখের উপস্থাপনাগুলি অন্য কোনও মানে রূপান্তর করা উচিত, তবে তার ফেরতের মানটি পরীক্ষা করুন DateTime.TryParseএবং এটি মিথ্যা হলে স্পষ্টভাবে মানটি সেট করুন।
DateTime?( তারিখসময় nullable )
double.Parse ( "-"); ডাবল চেষ্টা করার সময় একটি ব্যতিক্রম উত্থাপন করে। ট্রাইপার্স ("-", পার্সড আউট); 0 তে পার্স করা হয়েছে তাই আমার ধারণা ট্রাইপার্স আরও জটিল রূপান্তর করে।
TryParseফিরে আসে trueনাকি false? এটি "বৈধ" থাকলে আপনি কীভাবে জানতে পারবেন।