একটি সুস্পষ্ট প্রকারের জন্য একটি switch
ব্যবহার করে একটি প্যাটার্ন মিলের বিবৃতিটি case
জিজ্ঞাসা করছে যে প্রশ্নে মানটি সেই নির্দিষ্ট ধরণের, বা উদ্ভূত প্রকারের। এটি হুবহু সমতুল্যis
switch (someString) {
case string s:
}
if (someString is string)
মানটির null
কোনও প্রকার নেই এবং তাই উপরের শর্তগুলির কোনওটিই সন্তুষ্ট করে না। স্থিতিশীল ধরণের someString
কোনও উদাহরণই কার্যকর হয় না।
var
টাইপ যদিও প্যাটার্ন ম্যাচিং একটি ওয়াইল্ড কার্ড হিসেবে কাজ করে এবং সহ যেকোন মান ম্যাচ হবে null
।
এখানে default
মামলাটি ডেড কোড। এটি case var o
কোনও মান, নাল বা নন-নাল সাথে মিলবে। একটি ডিফল্ট ক্ষেত্রে সর্বদা একটি ডিফল্ট ক্ষেত্রে জয়লাভ করে তাই default
কখনও আঘাত করা হবে না। আপনি যদি আইএলটি দেখেন তবে আপনি দেখতে পাবেন এটি এমনকি নির্গত হয় না।
এক নজরে এটি বিজোড় মনে হতে পারে যে এটি কোনও সতর্কতা ছাড়াই সংকলন করে (অবশ্যই আমাকে ফেলে দিয়েছে)। তবে এটি সি # আচরণের সাথে মিলছে যা 1.0 এ ফিরে যায়। default
সংকলকটি যখন তুচ্ছভাবে প্রমাণ করতে পারে যে এটি কখনই আঘাত হানে না এমন ক্ষেত্রেও কেসগুলি অনুমতি দেয় । নিম্নলিখিত হিসাবে একটি উদাহরণ হিসাবে বিবেচনা করুন:
bool b = ...;
switch (b) {
case true: ...
case false: ...
default: ...
}
এখানে default
কখনও আঘাত করা হবে না (এমনকি এর জন্য bool
একটি মানও 1 বা 0 নয়)। তবুও সি # সতর্কতা ছাড়াই 1.0 থেকে এটির অনুমতি দিয়েছে। প্যাটার্ন মিলটি এখানে এই আচরণের সাথে সামঞ্জস্য হয়।
o
করা হয়string
(জেনেরিক্স সঙ্গে নিশ্চিত - অর্থাৎFoo(o)
যেখানেFoo<T>(T template) => typeof(T).Name
) - এটি একটি খুব আকর্ষণীয় ক্ষেত্রে দেখা যায় যেখানেstring x
আচরণ করবে ভিন্নভাবে চেয়েvar x
এমনকি যখনx
(কম্পাইলার দ্বারা) টাইপ করা হয়string