2012-12-19 5 views
132

Bunlardan birini diğerinden seçmenin bir nedeni var mı?new DateTime() vs varsayılan (DateTime)

DateTime myDate = new DateTime(); 

veya

DateTime myDate = default(DateTime); 

Her ikisi de

1/1/0001 12:00:00 AM eşittir.

+26

DateTime myDate = DateTime .MinValue 'de:/ – Lloyd

+13

@Lloyd Çoğu zaman ... ama varsayılan bir parametre olarak değil DateTime.MinValue bir derleme zaman sabiti değil - ancak varsayılan (DateTime)/yeni DateTime()' dir. – Ricibob

+7

Sadece Ricibob'un mükemmel yorumunu açıklığa kavuşturmak yeterlidir, çünkü bu önemlidir: İsteğe bağlı bir parametre içeren bir yöntem oluşturuyorsanız, SADECE ya varsayılan (DateTime) 'veya' new DateTime() 'kullanabilirsiniz. Bunlar, isteğe bağlı parametre değerleri için gerekli olan * derleme zamanı sabitleridir *. Derleme zamanı sabitleri gerekli değilse, sonra varsayılan (DateTime) ',' yeni DateTime() 've' DateTime.MinValue' değiştirilebilir. – leanne

cevap

139

Hayır, aynıdırlar.

default(), herhangi bir değer türü için (DateTime bir değer türüdür) her zaman parametresiz yapıcıyı çağırır.

+22

FWIW; C# 6'da bu davranış değişecektir. C# 6 yapıları için [parametresiz yapıcılar] 'ı (https://roslyn.codeplex.com/discussions/562559) tanıtır; bu, 'new''in davranışının' default (T) '' den ne yapacağından farklı olmasını sağlar. – vcsjones

+19

Varsayılan olarak (DateTime) 'ın programcının amacına daha açıklayıcı olduğu, dolayısıyla genellikle daha elverişli olduğu iddia edilebilir. –

+8

@vcsjones, bununla birlikte C# 6.0'ın son sürümünden önce kaldırıldı. – nawfal

13

Cevap hayır. Her iki durumda da, mdDate.Kind = DateTimeKind.Unspecified unutmayın.

nedenle aşağıdakileri yapmak daha iyi olabilir:

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

myDate.Kind mülkiyet salt okunur, yani kurucu denir sonra değiştirilemez.

+2

OP'nin sorusu nasıl? –

+32

Lütfen cevabımın ilk 4 kelimesine bakın. –

+2

Buna karşı iddia ediyorum. Varsayılan 'DateTime', 'default (DateTime) 'ile basit bir karşılaştırmayla bir değer ayarlanmamış değer olarak kullanışlıdır. Hangi kullanım varsayılan olmayan bir '01/01/0001' değeridir? – Rawling

16

Bir yöntemde bir DateTime parametresi için varsayılan değer kullanmak isterseniz, yalnızca varsayılan (DateTime) kullanabilirsiniz.

aşağıdaki satırı derlemek olmaz:

private void MyMethod(DateTime syncedTime = DateTime.MinValue) 

Bu hat derlenir: ayrıca sadece `yapabileceği şekilde, DateTime.MinValue`` eşittir

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

Aradığım cevap buydu. Teşekkürler! – GigaKatowice

+0

Tabii ki DateTime.MinValue derleme yapmıyor mu? İsteğe bağlı parametreler MinValue olmayan derleme zamanı sabitleri olmalıdır. default (DateTime) ve new DateTime() her ikisi de geçerlidir. (aslında DateTime x = default (DateTime) geçerli değil, çünkü DateTime değerleri derleme zamanı sabitleri olarak bildirilemez) –