আপনার বোঝা সত্য। এটি আমার কাছে মাইক্রো-অপ্টিমাইজ করার চেষ্টা করার মতো শোনাচ্ছে। আপনি যখন টাইপ সম্পর্কে নিশ্চিত হন তখন আপনার স্বাভাবিক কাস্ট ব্যবহার করা উচিত। আরও বুদ্ধিমান ব্যতিক্রম উত্পন্ন করার পাশাপাশি এটি দ্রুত ব্যর্থ হয়। আপনি যদি টাইপ সম্পর্কে আপনার ধৃষ্টতা চলেছেন ভুল, আপনার প্রোগ্রাম অবিলম্বে ব্যর্থ হবে এবং আপনি ব্যর্থতা অবিলম্বে বদলে অপেক্ষা কারণ দেখার জন্য একটি জন্য সক্ষম হবেন NullReferenceException
বা ArgumentNullException
বা এমনকি একটি লজিক্যাল ত্রুটি ভবিষ্যতে একদা। সাধারণভাবে, একটি as
অভিব্যক্তি যা null
কোথাও চেক অনুসরণ করে না তা হ'ল কোড গন্ধ।
অন্যদিকে, যদি আপনি কাস্ট সম্পর্কে নিশ্চিত না হন এবং এটি ব্যর্থ হওয়ার প্রত্যাশা করেন, তবে আপনাকে as
একটি try-catch
ব্লক মোড়ানো সাধারণ কাস্টের পরিবর্তে ব্যবহার করা উচিত । তদ্ব্যতীত, as
কাস্টের পরে কোনও প্রকারের চেক ব্যবহারের পরামর্শ দেওয়া হয়। পরিবর্তে:
if (x is SomeType)
((SomeType)x).SomeMethod();
যা উত্পন্ন isinst
নির্দেশ জন্য is
শব্দ, এবং একটি castclass
নির্দেশ ঢালাই (কার্যকরভাবে ঢালাই দুইবার করণ), আপনি ব্যবহার করা উচিত:
var v = x as SomeType;
if (v != null)
v.SomeMethod();
এটি কেবল একটি isinst
নির্দেশ জেনারেট করে । প্রাক্তন পদ্ধতিটি মাল্টিথ্রেডেড অ্যাপ্লিকেশনগুলির একটি সম্ভাব্য ত্রুটি রয়েছে কারণ একটি জাতি শর্তের কারণে is
চেকটি সফল হওয়ার পরে এবং কাস্ট লাইনে ব্যর্থ হওয়ার পরে ভেরিয়েবলটি তার ধরণের পরিবর্তন করতে পারে। পরবর্তী পদ্ধতিটি এই ত্রুটির প্রবণ নয়।
নিম্নলিখিত কোডটি উত্পাদন কোডে ব্যবহারের জন্য প্রস্তাবিত নয় । আপনি যদি সত্যিই সি # তে এই জাতীয় মৌলিক নির্মাণকে ঘৃণা করেন তবে আপনি ভিবি বা অন্য কোনও ভাষাতে স্যুইচ করার বিষয়টি বিবেচনা করতে পারেন।
যদি কেউ কাস্ট সিনট্যাক্সকে মারাত্মকভাবে ঘৃণা করে তবে সে কাস্ট নকল করার জন্য একটি এক্সটেনশন পদ্ধতি লিখতে পারে:
public static T To<T>(this object o) { // Name it as you like: As, Cast, To, ...
return (T)o;
}
এবং একটি ঝরঝরে [?] বাক্য গঠন ব্যবহার করুন:
obj.To<SomeType>().SomeMethod()