আমি স্ট্রিংকে একটি গাইডে রূপান্তর করতে চেষ্টা করতে চাই, তবে আমি ব্যতিক্রমগুলি ধরার উপর নির্ভর করতে চাই না (
- কর্মক্ষমতা কারণে - ব্যতিক্রম ব্যয়বহুল
- ব্যবহারের কারণে - ডিবাগার পপ আপ
- ডিজাইন কারণে - প্রত্যাশিত ব্যতিক্রমী নয়
অন্য কথায় কোড:
public static Boolean TryStrToGuid(String s, out Guid value)
{
try
{
value = new Guid(s);
return true;
}
catch (FormatException)
{
value = Guid.Empty;
return false;
}
}
উপযুক্ত নয়.
আমি RegEx ব্যবহার করার চেষ্টা করব, তবে গাইড যেহেতু প্রথম বন্ধনী আবৃত হতে পারে, ব্রেস মোড়ানো, কোনও মোড়ানো নয়, এটি শক্ত করে তোলে।
অতিরিক্ত হিসাবে, আমি ভেবেছিলাম যে কয়েকটি গাইডের মানগুলি অবৈধ (?)
আপডেট 1
খ্রিস্টানকেFormatException
সবার চেয়ে কেবল ধরা ভাল ধারণা ছিল । পরামর্শ অন্তর্ভুক্ত করতে প্রশ্নের কোড নমুনা পরিবর্তন করেছে।
আপডেট 2
কেন ছোঁড়া ব্যতিক্রম সম্পর্কে উদ্বেগ? আমি কি আসলেই প্রায়শই অবৈধ জিইউইডিগুলি আশা করি?
উত্তর হ্যাঁ । এজন্য আমি ট্রাইস্টারটোগুইড ব্যবহার করছি - আমি খারাপ ডেটা প্রত্যাশা করছি ।
উদাহরণ 1 নামের স্থান এক্সটেনশানগুলি ফোল্ডারের নামের সাথে একটি জিইউআইডি যুক্ত করে নির্দিষ্ট করা যেতে পারে । আমি ফোল্ডারের নামগুলি পার্স করছিলাম, ফাইনালের পরে পাঠ্য কিনা তা পরীক্ষা করে দেখছি । একটি নির্দেশিকা।
c:\Program Files
c:\Program Files.old
c:\Users
c:\Users.old
c:\UserManager.{CE7F5AA5-6832-43FE-BAE1-80D14CD8F666}
c:\Windows
c:\Windows.old
উদাহরণ 2 আমি সম্ভবত একটি ভারী ব্যবহৃত ওয়েব-সার্ভার চালিয়ে যাচ্ছি কিছু পোস্ট ব্যাক ডেটার বৈধতা পরীক্ষা করতে চাই। আমি চাই না যে অবৈধ ডেটাগুলি সংস্থানগুলি 2-3 মাপের বাড়ির ক্রমগুলি আবশ্যক তার চেয়ে বেশি হওয়া উচিত।
উদাহরণ 3 আমি কোনও ব্যবহারকারীর দ্বারা প্রবেশ করা একটি অনুসন্ধানের এক্সপ্রেশনকে পার্স করছিলাম।
যদি তারা জিইউইডি'র প্রবেশ করে তবে আমি তাদের বিশেষভাবে প্রক্রিয়া করতে চাই (যেমন নির্দিষ্টভাবে সেই বস্তুর সন্ধান করা, বা প্রতিক্রিয়া পাঠ্যে সেই নির্দিষ্ট সন্ধানের শব্দটি হাইলাইট এবং বিন্যাস করুন।)
আপডেট 3 - পারফরম্যান্স মানদণ্ড
10,000 টি ভাল গাইড এবং 10,000 টি খারাপ গাইড রূপান্তর করার পরীক্ষা করুন।
Catch FormatException:
10,000 good: 63,668 ticks
10,000 bad: 6,435,609 ticks
Regex Pre-Screen with try-catch:
10,000 good: 637,633 ticks
10,000 bad: 717,894 ticks
COM Interop CLSIDFromString
10,000 good: 126,120 ticks
10,000 bad: 23,134 ticks
PS আমি একটি প্রশ্নের ন্যায়সঙ্গত করা উচিত নয়।
4.0
। যে কারণে প্রশ্ন, এবং স্বীকৃত উত্তরগুলি হ'ল তারা।