পার্স করা বনাম ট্রাইপার্স


111

পার্স () এবং ট্রাই পার্সে () এর মধ্যে পার্থক্য কী?

int number = int.Parse(textBoxNumber.Text);

// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);

ট্রায়-ক্যাচ ব্লকের মতো ত্রুটি-পরীক্ষার কোনও রূপ রয়েছে?

উত্তর:


155

Parseযদি মানটি বিশ্লেষণ করতে না পারে তবে একটি ব্যতিক্রম ছুঁড়ে দেয়, যেখানে এটি সফল হয়েছে কিনা তা নির্দেশ করে TryParsereturnsbool

TryParseকেবল try/ catchঅভ্যন্তরীণভাবে নয় - এর পুরো বিষয়টি হ'ল এটি ব্যতিক্রম ছাড়াই বাস্তবায়ন করা হয়েছে যাতে এটি দ্রুত হয়। বাস্তবে এটি সম্ভবত কার্যকরভাবে প্রয়োগ করা হয় তা হ'ল অভ্যন্তরীণ Parseপদ্ধতিটি কল করবে TryParseএবং যদি ফিরে আসে তবে ব্যতিক্রম ছুঁড়ে ফেলবে false

সংক্ষেপে, Parseমানটি বৈধ হবে কি না তা নিশ্চিত হয়ে ব্যবহার করুন ; অন্যথায় ব্যবহার TryParse


1
"অভ্যন্তরীণভাবে পার্স পদ্ধতিটি ট্রাই পার্সিকে কল করবে" ব্যতীত কয়েকটি সংস্করণে পার্স প্রাক-তারিখের ট্রিপ পার্সকে বাদ দেয়। অবশ্যই, তারা মূল প্রয়োগটি ট্রাইপার্সে সরিয়ে নিতে পারত ...
জোয়েল কোহহর্ন

4
@Joel - আমি তারা বাস্তবায়ন চলে যেত অধিকৃত, কিন্তু আমি শুধু প্রতিফলক সঙ্গে একটি চেহারা ছিল এবং তারা পৃথক বাস্তবায়নের হয় ঠিক একই অন্য কোড একাধিক আছে 'থ্রো ...' এবং এক 'রিটার্ন মিথ্যা' হয়েছে। আমি ভাবছি কেন তারা একীভূত হয় না ?!
গ্রেগ বিচ

6
যদিও, এটি নিয়ে চিন্তা করেই, পার্সে বিভিন্ন ব্যতিক্রম ছুঁড়ে ফেলেছে তাই যদি ট্রাইপার্সের থেকে এটি সমস্তই একটি বুল হত তবে কোনটি নিক্ষেপ করতে হবে তা তা জানত না।
গ্রেগ বিচ

5
"পার্স ব্যবহার করুন যদি আপনি নিশ্চিত হন যে মানটি কার্যকর হবে"। আমি যুক্ত করব, "তবে আপনি ভুল হতে পারে এমন সম্ভাবনাটি স্বীকার করেছেন"। আপনি যদি 100% নিশ্চিত হন যে এটি পার্স করতে পারে তবে আপনি ঠিক ততটাই সঠিকভাবে ট্রাইপার্স ব্যবহার করতে পারেন যা দ্রুত হতে পারে।
জন

2
এবং "বিভিন্ন ব্যতিক্রম" দ্বারা, @ গ্রেগবিচ এর অর্থ বার্তা, ক্লাস নয়।
পল ড্রাগার

26

যদি স্ট্রিংটিকে পূর্ণসংখ্যায় রূপান্তর করা না যায় তবে

  • int.Parse() একটি ব্যতিক্রম নিক্ষেপ করবে
  • int.TryParse() মিথ্যা ফিরে আসবে (তবে একটি ব্যতিক্রম ছুঁড়ে না)

আমি যদি int.TryParse (কিছু_মোথাল_থ্যাথ_থ্রো_ এক্সসেপশন (), ইনট টেস্ট) ব্যবহার করি তবে কী হবে? এটি কি কোনও ব্যতিক্রম বা কেবলমাত্র পার্সিং সম্পর্কিত সম্পর্কিতকেই ধরবে?
আলেকজান্দ্রু আন্টুচি

অ্যালেক্সান্দ্রুআন্টোচি আপনি মন্তব্য হিসাবে কোনও প্রশ্ন জিজ্ঞাসা করবেন না। এটি অন্যদের পক্ষে দরকারী উত্তর থেকে উপকৃত হওয়া প্রায় অসম্ভব করে তুলবে। যাইহোক, এটি আপনার অযোগ্য হিসাবে মূল্যবান করার জন্য, আপনার প্রশ্নের উত্তর হ'ল না, int.TryParse এটিকে কোনওভাবেই ফেলবে না। যদি পদ্ধতিটি বিশ্লেষণে ব্যর্থ হয়, তবে এটি কেবল মিথ্যাটির ফেরত মূল্য দ্বারা এটি প্রতিফলিত করবে। এটি (int.TryParse… পার্স সফল হলে কেবল কিছু করার জন্য যদি এটি ব্যবহার করা সুবিধাজনক করে তোলে
রব

3

ট্রাইপার্স পদ্ধতি আপনাকে কিছু পরীক্ষা করার যোগ্য কিনা তা পরীক্ষা করার অনুমতি দেয়। যদি আপনি প্রথমবারের মতো কোনও অকার্যকর int দিয়ে পার্স চেষ্টা করেন তবে ট্রাই পার্সে থাকাকালীন আপনি একটি ব্যতিক্রম পাবেন, এটি পার্সে সফল হয়েছে কিনা তা আপনাকে জানাতে একটি বুলিয়ান দেয় returns

পাদটীকা হিসাবে, বেশিরভাগ ট্রিপর্স পদ্ধতিতে বাতিল হয়ে যাওয়া ব্যতিক্রম করবে।


মৌলিক ধরণের (
ইন্ট

3

ট্রাইপার্স এবং ব্যতিক্রম কর

কোনও স্ট্রিং থেকে নির্দিষ্ট ডেটাটাইপের রূপান্তর ব্যর্থ হলে পার্স একটি ব্যতিক্রম ছুঁড়ে ফেলে, অন্যদিকে ট্রাইপার্স স্পষ্টতই একটি ব্যতিক্রম ছোঁড়া থেকে বিরত থাকে।


আপনি বেশিরভাগ ইন্টিগ্রাল ট্রাইপার্স পদ্ধতিতে বাতিল করে দিলে ট্রাইপার্স ব্যতিক্রম করবে।
রায় বুয়সেন

1
দুর্দান্ত লিঙ্ক। আমি অবাক হয়েছি যে কেউ "এখনও কোনটি সেরা বা কোন কোডিং অনুশীলনটি প্রয়োগ করা উচিত" আলোচনাটি এখনও শুরু করেনি।
খ্রিস্টান ম্যাডসেন

0

ট্রাইপার্স মানটি ফিরিয়ে দেয় না, এটি পার্স সফল হয়েছে কিনা তা নির্দেশ করার জন্য একটি স্ট্যাটাস কোড দেয় (এবং কোনও ব্যতিক্রম ছুঁড়ে না)।


6
ট্রাইপার্সে প্যারামিটার দুইটির মাধ্যমে মানটি প্রদান করে যা আউট কীওয়ার্ডের সাহায্যে নির্দিষ্ট করা হয়।
খ্রিস্টান ম্যাডসেন

0

রেকর্ডের জন্য, আমি দুটি কোড পরীক্ষা করছি: এটি কেবল স্ট্রিং থেকে একটি সংখ্যায় রূপান্তর করার চেষ্টা করে এবং যদি এটি ব্যর্থ হয় তবে সংখ্যাটি শূন্যকে নির্ধারণ করুন।

        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

এটি বেদনাদায়ক ধীর এবং অবাঞ্ছিত, তবে, কোডটি থামবে না যতক্ষণ না ডিবাগের ব্যতিক্রম এটি বন্ধ করার জন্য নিষ্পত্তি না করা হয়।


প্রথম কোড স্নিপপিত কিছুই করতে পারে না, যেহেতু স্ট্রিংটি কোনও int হিসাবে পার্স করতে সক্ষম না হলে tmpint ইতিমধ্যে শূন্যে সেট করা থাকবে।
অ্যান্ড্রু নীলি

0

আমি এটি একটি খুব পুরানো পোস্ট জানি কিন্তু পার্স বনাম ট্রাইপার্সে আরও কয়েকটি বিশদ ভাগ করে নেওয়ার চিন্তাভাবনা করেছি।

আমার এমন একটি দৃশ্য ছিল যেখানে ডেটটাইমকে স্ট্রিংয়ে রূপান্তর করা দরকার এবং যদি তারিখের মূল্য নাল বা স্ট্রিং 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 )
Kiquenet

-1

double.Parse ( "-"); ডাবল চেষ্টা করার সময় একটি ব্যতিক্রম উত্থাপন করে। ট্রাইপার্স ("-", পার্সড আউট); 0 তে পার্স করা হয়েছে তাই আমার ধারণা ট্রাইপার্স আরও জটিল রূপান্তর করে।


4
কিন্তু TryParseফিরে আসে trueনাকি false? এটি "বৈধ" থাকলে আপনি কীভাবে জানতে পারবেন।
পল ড্রাগার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.