নীচের উত্তরটি কয়েক বছর আগে লেখা হয়েছিল এবং সময়ের সাথে সাথে আপডেট হয়েছিল। সি # 7 হিসাবে, আপনি প্যাটার্ন মিলটি ব্যবহার করতে পারেন:
if (animal is Dog dog)
{
// Use dog here
}
দ্রষ্টব্য যে বিবৃতিটির dog
পরেও সুযোগ রয়েছে if
, তবে অবশ্যই নির্ধারিত নয়।
না, নেই। এটি লিখতে আরও বুদ্ধিমানের বিষয় যদিও:
Dog dog = animal as Dog;
if (dog != null)
{
// Use dog
}
প্রদত্ত যে "যদি অনুসরণ করা হয়" প্রায় সর্বদা এভাবে ব্যবহার করা হয়, তবে সেখানে অপারেটর থাকার জন্য এটি আরও বোধ করতে পারে যা উভয় অংশ একসাথে সম্পাদন করে। এটি বর্তমানে সি # 6 এ নেই তবে প্যাটার্ন মিলের প্রস্তাবটি বাস্তবায়িত হলে এটি সি # 7 এর অংশ হতে পারে ।
সমস্যাটি হ'ল আপনি কোনও বিবৃতি 1 এর শর্তের অংশে পরিবর্তনশীল ঘোষণা করতে পারবেন না । আমি যে নিকটতম পদ্ধতির কথা ভাবতে পারি তা হ'ল:if
// EVIL EVIL EVIL. DO NOT USE.
for (Dog dog = animal as Dog; dog != null; dog = null)
{
...
}
এটি ঠিক বাজে ... (আমি এটি চেষ্টা করেছি, এবং এটি কাজ করে But তবে দয়া করে, দয়া করে এটি করবেন না Oh ওহ, এবং আপনি অবশ্যই এটি dog
ব্যবহার করে ঘোষণা করতে পারেন var
))
অবশ্যই আপনি একটি এক্সটেনশন পদ্ধতি লিখতে পারেন:
public static void AsIf<T>(this object value, Action<T> action) where T : class
{
T t = value as T;
if (t != null)
{
action(t);
}
}
তারপরে এটিকে কল করুন:
animal.AsIf<Dog>(dog => {
// Use dog in here
});
বিকল্পভাবে, আপনি দুটি একত্রিত করতে পারেন:
public static void AsIf<T>(this object value, Action<T> action) where T : class
{
// EVIL EVIL EVIL
for (var t = value as T; t != null; t = null)
{
action(t);
}
}
ল্যাম্পের চেয়ে ক্লিনার উপায়ে ল্যাম্বডা এক্সপ্রেশন ছাড়াই আপনি একটি এক্সটেনশন পদ্ধতিও ব্যবহার করতে পারেন:
public static IEnumerable<T> AsOrEmpty(this object value)
{
T t = value as T;
if (t != null)
{
yield return t;
}
}
তারপর:
foreach (Dog dog in animal.AsOrEmpty<Dog>())
{
// use dog
}
1 আপনি বিবৃতিতে মান নির্ধারণ করতে পারেন if
, যদিও আমি খুব কমই এটি করি। এটি যদিও ভেরিয়েবল ঘোষণার মতো নয়। যদিও ডেটা স্ট্রিমগুলি পড়ার সময় এটি করা আমার পক্ষে মারাত্মক অস্বাভাবিক নয় while
। উদাহরণ স্বরূপ:
string line;
while ((line = reader.ReadLine()) != null)
{
...
}
এই দিনগুলিতে আমি সাধারণত একটি মোড়ক ব্যবহার করতে পছন্দ করি যা আমাকে ব্যবহার করতে দেয় foreach (string line in ...)
তবে আমি উপরেরটিকে একটি সুন্দর প্রতিচ্ছবি হিসাবে দেখি। এটা সাধারণত চমৎকার একটি শর্ত মধ্যে পার্শ্ব প্রতিক্রিয়া আছে না, কিন্তু বিকল্প সাধারণত কোড অনুলিপি জড়িত, এবং যখন আপনি এই প্যাটার্ন জানেন এটা অধিকার পেতে সহজ।
bool
অবস্থা হবে?