কেন রিশার্পার "হিসাবে" "" হিসাবে "পছন্দ করে?


13

যখন আমি এই জাতীয় কোড লিখি, যেখানে আপত্তি একটি স্থানীয় ভেরিয়েবল:

if (obj is IMyInterface)
{
   var result = (IMyInterface)obj;
   // ....
}

রিশার্পার এটিকে কোডগুলিতে পরিবর্তিত করার প্রস্তাব দেয়:

var result = obj as IMyInterface;
if (result != null)
{
   // ...
}

আমি পূর্বেরটিকে পছন্দ করি, কারণ এটি দুর্ঘটনাজনিত নাল রেফারেন্স ব্যতিক্রমগুলির জন্য কোনও সুযোগ দেয় না। অন্যান্য ফর্মকে প্রাধান্য দেওয়ার কী কারণ রয়েছে?

রেশার্পার কেন এটি সুপারিশ করে?

উত্তর:


25

সি # তে কাস্টিং সম্পর্কে সাধারণ প্রশ্নের জন্য প্রথমে জোন স্কিটের উত্তরটি দেখুন :

এটি করবেন না:

if (randomObject is TargetType)
{
    TargetType foo = (TargetType) randomObject;
    // Do something with foo
}

এটি কেবল দুটিবার যাচাই করা নয়, এটি যদি স্থানীয় ভেরিয়েবলের পরিবর্তে র্যান্ডমঅবজেক্ট ক্ষেত্র হয় তবে এটি বিভিন্ন জিনিস পরীক্ষা করতে পারে। "যদি" পাস করা সম্ভব হয় তবে কাস্ট ব্যর্থ হতে পারে, যদি অন্য থ্রেড দুটির মধ্যে র্যান্ডমঅবজেক্টের মান পরিবর্তন করে।

(...)

যদি র্যান্ডমঅবজেক্টটি টার্গেটটাইপের উদাহরণ হতে পারে এবং টার্গেটটাইপ একটি রেফারেন্স টাইপ হয়, তবে এই জাতীয় কোড ব্যবহার করুন:

TargetType convertedRandomObject = randomObject as TargetType;
if (convertedRandomObject != null)
{
    // Do stuff with convertedRandomObject
}

তারপরে অনুরূপ বিষয়গুলি দেখুন:


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.