আমার একটি জেনেরিক ক্লাস রয়েছে যা কোনও প্রকার, আদিম বা অন্য কোনওভাবে মঞ্জুরি দেয়। এটির সাথে একমাত্র সমস্যাটি ব্যবহার করা default(T)
। যখন আপনি কোনও মান প্রকার বা স্ট্রিংয়ে ডিফল্ট কল করেন, তখন এটি একটি যুক্তিসঙ্গত মান হিসাবে শুরু করে (যেমন খালি স্ট্রিং)। আপনি যখন default(T)
কোনও বস্তুতে কল করবেন তখন তা শূন্য হয়। বিভিন্ন কারণে আমাদের তা নিশ্চিত করতে হবে যে এটি যদি কোনও আদিম ধরণের না হয়, তবে আমাদের কাছে টাইপের একটি ডিফল্ট উদাহরণ থাকবে, শূন্য নয় । এখানে চেষ্টা 1:
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
সমস্যা - স্ট্রিং কোনও মান ধরণের নয়, তবে এতে প্যারামিটারলেস কনস্ট্রাক্টর নেই। সুতরাং, বর্তমান সমাধানটি হ'ল:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
তবে এটি ক্লাডজের মতো অনুভব করে। স্ট্রিং কেসটি হ্যান্ডেল করার কোনও দুর্দান্ত উপায় নেই?