উত্তর:
এটি কেবলমাত্র সি # 8 এর খালি সম্পত্তির প্যাটার্ন, যার অর্থ মান নেই null। এটি কোনও মান ধরণের বা রেফারেন্সের ধরণের সাথে মেলে। পানাজিওটিস কানভোস মন্তব্যগুলিতে যেমন মন্তব্য করেছেন, value is objectএটি দীর্ঘকাল ধরে সি # তে থাকা ভাল পুরানো চেকের সমান ।
সাধারণত আপনি যদি কোনও সম্পত্তি নির্দিষ্ট করে থাকেন তবে তা মিলবে কি না। এই রহস্যজনক উদাহরণ চিত্রিত করে যে:
if (value is { Length: 2 })
{
// matches any object that isn't `null` and has a property set to a length of 2
}
সম্পত্তির নিদর্শনগুলি সর্বোত্তমভাবে কাজ করে এবং switchপ্রকাশের মতো ক্ষেত্রে অন্যান্য নিদর্শনগুলির সাথে তুলনা করার সময় সর্বাধিক স্পষ্ট হয় ।
sনিঃসন্দেহে নাল না। is {}শর্টহ্যান্ড এর জন্য is objectএবং স্ট্রিংগুলি আপত্তিতে কাস্ট করা যেতে পারে।
!, !!, ?এবং ??আগে ও পরে বৈশিষ্ট্য ভিন্ন জিনিস মানে। সিনট্যাকটিক চিনি কখন শেষ হবে?
value != null?
ড্যানিয়েলের উত্তরটি সঠিক হলেও, আমি মনে করি যে আপনি কেন খালি সম্পত্তির প্যাটার্ন ব্যবহার করতে পারেন তা নিয়ে কিছু প্রসঙ্গ যুক্ত করা কার্যকর হতে পারে । এই উদাহরণস্বরূপ নিয়ন্ত্রক পদ্ধতিটি বিবেচনা করুন যা কিছু বৈধতা সম্পন্ন করা দরকার:
public async Task<IActionResult> Update(string id, ...)
{
if (ValidateId(id) is { } invalid)
return invalid;
...
}
উপরের দিকে, ValidateId()নাল বা একটি উদাহরণ ফিরে আসতে পারে BadObjectRequestResult। যদি প্রাক্তনটিকে ফিরিয়ে দেওয়া হয় তবে বৈধতা সফল হয় এবং এর বাকী অংশে চলে যায় Update। যদি পরবর্তীটি ফিরে আসে is {}তবে সত্য (অর্থাত্ অবশ্যই এর উদাহরণটি BadObjectRequestResultএকটি object), এবং বৈধতা ব্যর্থ হয়।
সুন্দরভাবে, এর মধ্যে আমরা একটি পরিবর্তনশীল নামও সরবরাহ করেছি invalid, যা আমরা অবিলম্বে ফিরে আসতে পারি। তা ছাড়া আমাদের আরও ভার্বোজ কোডের দরকার হয়।
public async Task<IActionResult> Update(string id, ...)
{
var invalid = ValidateId(id);
if (invalid != null)
return invalid;
...
}
একটিতে আরও পঠনযোগ্য বা অন্যটি পাঠকের উপর নির্ভরশীল, খালি সম্পত্তির প্যাটার্নটি ব্যবহার করার একটি উপায় আমি কেবল উপস্থাপন করেছি।
is object invalidis {} invalid
IActionResultপ্রয়োজন (ভাল প্রযুক্তিগতভাবে Task<IActionResult>)। আমরা যদি আপনার স্টাইলের সাথে যাই ifতবে এর একই ফল রয়েছে তবে invalidএটি একটি objectসংকলন হবে না।