উত্তর:
সি # তে কোনও মান নির্ধারিত হয়নি এমন একটি ভেরিয়েবল থাকার একমাত্র উপায় হ'ল এটি স্থানীয় ভেরিয়েবল হতে পারে - সংকলনের সময় আপনি বলতে পারেন যে এটি অবশ্যই পড়ার চেষ্টা করে নিযুক্ত করা হয়নি: )
আমি সন্দেহ করি যে আপনি সত্যই চান Nullable<DateTime>(বা DateTime?সি # সিনট্যাকটিক চিনির সাথে) - এটি nullশুরু করার পরে একটি সাধারণ DateTimeমান নির্ধারণ করুন (যা যথাযথ রূপান্তরিত হবে) will তারপরে আপনি "প্রকৃত" মান সেট করা হয়েছে কিনা তা দেখতে আপনি কেবল null(বা HasValueসম্পত্তি ব্যবহারের সাথে ) তুলনা করতে পারেন ।
default(DateTime)হয়েছিল এবং এটি যেটি দিয়ে শুরু করা উচিত। মূলত এটি ডোমেনের মধ্যে একটি মূল্যকে "সাধারণ ব্যবহারের জন্য বিশেষ এবং অনুপলব্ধ" হিসাবে বিবেচনা করে যা আমি অপছন্দ করি।
আপনি কি এরকম বলতে চান:
DateTime datetime = new DateTime();
if (datetime == DateTime.MinValue)
{
//unassigned
}
অথবা আপনি নলবল ব্যবহার করতে পারেন
DateTime? datetime = null;
if (!datetime.HasValue)
{
//unassigned
}
এটি কোথাও রাখুন:
public static class DateTimeUtil //or whatever name
{
public static bool IsEmpty(this DateTime dateTime)
{
return dateTime == default(DateTime);
}
}
তারপর:
DateTime datetime = ...;
if (datetime.IsEmpty())
{
//unassigned
}
IsEmptyপদ্ধতিটি সত্য হবে, যা সম্ভবত আপনি চান তা নয় (কারণ এটি খালি নয় - এটি ডিফল্ট মান নির্ধারণ করা হয়েছে)। আমি আপনার পদ্ধতির নামের আরো উপযুক্ত হবে IsDefaultValue। যেহেতু আপনি সত্যিই কোনও অ-অযোগ্য ডেটটাইম রাখতে পারবেন না IsEmpty।
IsDefaultValueআরও ভাল হত
আমি সবেমাত্র জানতে পেরেছি যে একটি নিরক্ষিত তারিখের জন্য গেটহ্যাশকোড () সর্বদা শূন্য। নাল ডেটটাইম চেক করার এটি কোনও ভাল উপায় কিনা তা আমি নিশ্চিত নই, কেননা, এই আচরণটি কেন প্রদর্শিত হয় সে সম্পর্কে আমি কোনও ডকুমেন্টেশন পাচ্ছি না।
if(dt.GetHashCode()==0)
{
Console.WriteLine("DateTime is unassigned");
}
GetHashCodeআয় 0 কারণ এঁটেল পোকা (DATETIME অভ্যন্তরীণ উপস্থাপনা) এর রয়েছে 0. হ্যাশ নিম্নলিখিত পদ্ধতিতে নির্ণিত কোডে সমান: unchecked((int)ticks) ^ (int)(ticks >> 32);। এছাড়াও এখানে দেখুন: রেফারেন্সসোর্স.মাইক্রোসফট.
আমি বলব ডিফল্ট মান সর্বদা থাকে new DateTime()। সুতরাং আমরা লিখতে পারি
DateTime datetime;
if (datetime == new DateTime())
{
//unassigned
}
আমি সাধারণত যেখানে সম্ভব হয় সেখানে মান ধরণের ডিফল্ট মান ব্যবহার করতে পছন্দ করি যেগুলি সেট করা হয়েছে কিনা তা নির্ধারণ করতে। এটি স্পষ্টতই সব সময় সম্ভব হয় না, বিশেষত ইনটগুলির সাথে - তবে ডেটটাইমসের জন্য, আমি মনে করি যে এটি পরিবর্তন করা হয়নি তা বোঝাতে মিনিভ্যালু সংরক্ষণ করা যথেষ্ট ন্যায্য। নালাগুলিগুলির ওপরে এটির সুবিধাটি হ'ল আরও একটি কম জায়গা যেখানে আপনি নাল রেফারেন্স ব্যতিক্রম পাবেন (এবং সম্ভবত এমন অনেকগুলি জায়গা যেখানে আপনাকে অ্যাক্সেস করার আগে নাল পরীক্ষা করতে হবে না!)
যদি আপনি নাল মান সম্পর্কিত সমস্যাগুলি যেমন আপনি যখন এটি ব্যবহার করেন তখন প্রতিবার নাল পরীক্ষা করা বা কোনও যুক্তিতে এটি গুটিয়ে ফেলার চিন্তা করতে না চান এবং আপনি অফসেটের সময় সমস্যাগুলি নিয়েও চিন্তা করতে চান না, তবে এটি হ'ল আমি কীভাবে সমস্যাটি সমাধান করেছি:
startDate = startDate < DateTime.MinValue.AddDays(1) ? keepIt : resetIt
আমি কেবলমাত্র পরীক্ষা করে দেখছি যে খেলাপি মানটি সময় শুরুর একদিনেরও কম পরে। একটি যাদুমন্ত্র মত কাজ করে.