নতুন ডেটটাইম () বনাম ডিফল্ট (ডেটটাইম)


196

এগুলির মধ্যে একটিকে অন্যটির থেকে বেছে নেওয়ার কোনও কারণ আছে কি?

DateTime myDate = new DateTime();

অথবা

DateTime myDate = default(DateTime);

উভয়ই সমান 1/1/0001 12:00:00 AM


28
যা সমান DateTime.MinValue, তাই আপনি ঠিক DateTime myDate = DateTime.MinValueপাশাপাশি করতেও পারেন : /
লয়েড

20
@ লয়েড বেশিরভাগ সময় ... তবে ডিফল্ট প্যারামিটার হিসাবে নয় ডেটটাইম Mমিনভ্যালু একটি সংকলন সময় ধ্রুবক নয় - তবে ডিফল্ট (ডেটটাইম) / নতুন ডেটটাইম () হয়।
রিকিবব

12
কেবল @ রিকিবোবের দুর্দান্ত মন্তব্যটি স্পষ্ট করার জন্য, কারণ এটি গুরুত্বপূর্ণ: আপনি যদি একটি alচ্ছিক প্যারামিটার দিয়ে কোনও পদ্ধতি তৈরি করে থাকেন তবে আপনি কেবল default(DateTime)বা কেবল ব্যবহার করতে পারেন new DateTime()Both চ্ছিক প্যারামিটার মানগুলির জন্য প্রয়োজনীয় এগুলি উভয়ই সংকলনের সময় ধ্রুবক । যদি কম্পাইল সময় ধ্রুবক প্রয়োজন নেই, তারপর default(DateTime), new DateTime()এবং DateTime.MinValueবিনিমেয়।
লিনে

উত্তর:


200

না, তারা অভিন্ন।

default(), কোনও মান প্রকারের জন্য ( DateTimeএকটি মান ধরণের) সর্বদা পরামিতিহীন নির্মাতাকে কল করবে।


29
FWIW; সি # 6 এ এই আচরণটি পরিবর্তিত হবে। সি # 6 প্রবর্তন parameterless কনস্ট্রাকটর structs মধ্যে, যার মধ্যে আচরণ অনুমতি জন্য newকি থেকে পৃথক default(T)করতে হবে।
vcsjones

30
যে কেউ তর্ক করতে পারে যে default(DateTime)প্রোগ্রামার এর অভিপ্রায় আরও বর্ণনামূলক, তাই সাধারণত আরো অনুকূল।
ইন্ট্রিপিডিস

16
@vcsjones তবে সি # 6.0 এর চূড়ান্ত প্রকাশের আগে এটি সরানো হয়েছিল।
নওফাল

5
@ নওফাল হ্যাঁ সম্ভবত এটিও সবচেয়ে ভাল did
vcsjones

এই উত্তরটি কেবল ভুল আইএমও: দুটি জিনিসই শব্দার্থগতভাবে অভিন্ন, তবে তাদের উভয়ই কোনও নির্মাণকারীকে ডাকে না - উভয় বাক্য গঠন বিকল্প ব্যবহার করেinitobj
মার্ক গ্র্যাভেল

22

আপনি যদি কোনও পদ্ধতিতে ডেটটাইম প্যারামিটারের জন্য ডিফল্ট মান ব্যবহার করতে চান তবে আপনি কেবলমাত্র ডিফল্ট (ডেটটাইম) ব্যবহার করতে পারেন।

নিম্নলিখিত লাইনটি সংকলন করবে না:

    private void MyMethod(DateTime syncedTime = DateTime.MinValue)

এই লাইনটি সংকলন করবে:

    private void MyMethod(DateTime syncedTime = default(DateTime))

3
অবশ্যই ডেটটাইম.মিনভ্যালু সংকলন করে না? Alচ্ছিক প্যারামিটারগুলি অবশ্যই সংকলন-সময় ধ্রুবক হতে হবে, যা MinValue নয়। ডিফল্ট (ডেটটাইম) এবং নতুন ডেটটাইম () উভয়ই বৈধ। (যা আসলেই মজার, কারণ কনস্ট ডেটটাইম এক্স = ডিফল্ট (ডেটটাইম) বৈধ নয়, যেহেতু ডেটটাইম মানগুলি সংকলন-সময় স্থির হিসাবে ঘোষণা করা যায় না)
জেরি কঙ্গাসনিমি

16

উত্তর না হয়। উভয় ক্ষেত্রে মনে রাখবেন mdDate.Kind = DateTimeKind.Unspecified,।

অতএব নিম্নলিখিতগুলি করা ভাল be

DateTime myDate = new DateTime(1, 1, 1, 0, 0, 0, DateTimeKind.Utc);

myDate.Kindসম্পত্তিটি কেবল পঠনযোগ্য, সুতরাং কনস্ট্রাক্টর বলার পরে এটি পরিবর্তন করা যাবে না।


2
ওপি'র প্রশ্নের উত্তরটি কীভাবে দেয়?
মো প্যাটেল

46
আমার উত্তর প্রথম 4 শব্দ দেখুন।
বেন সি

4
আমি এর বিরুদ্ধে তর্ক করব ডিফল্টটি DateTimeএএ মান-না-সেট মান হিসাবে একটি সাধারণ তুলনার সাথে কার্যকর default(DateTime)। কোন অ-ডিফল্ট 01/01/0001মান?
রোলিং

মনে রাখবেন যে এটি ডেটটাইমকাইন্ড.ইউটিসি-র পরিবর্তে ডেটটাইমকাইন্ড.ইউটিসি
রবার্তো

@ রবার্তো ধন্যবাদ, স্থির।
jpaugh

-3

এটি বোঝার সহজতম উপায় হ'ল ডেটটাইম একটি স্ট্রাক্ট। আপনি যখন কোনও কাঠামো সূচনা করেন তখন এটির সর্বনিম্ন মান থেকে এটি আরম্ভ হয়:DateTime.Min

অতএব তার মাঝে কোন পার্থক্য নেই default(DateTime)এবং new DateTime()এবংDateTime.Min


3
না, স্ট্রাক্টগুলি তাদের ন্যূনতম মান হিসাবে অগত্যা শুরু করা হয় না । এগুলি সমস্ত বিট শূন্য হওয়ার সূচনা করা হয়েছে। কিছু প্রকারের জন্য, এটি তাদের সর্বনিম্ন মান, অন্যদের জন্য যেমন সংখ্যার ধরণের যেগুলি নেতিবাচক হতে পারে, এটি তাদের ন্যূনতম মানের কাছাকাছি নয়। এবং অবশ্যই, অন্যদের এখনো তুলনীয় হতে পারে এবং করা হবে না আছে একটি "সর্বনিম্ন" মান।
27:58 '15
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.