একটি সুস্পষ্ট প্রকারের জন্য একটি 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