2013-01-11 18 views
6

Mam dwa pytania:DateTime w VB.NET i C#

  1. Date i DateTime: czy są one różne lub takie same w VB?

  2. DateTime można przypisać Nic w VB, gdzie nie można go przypisać w C#. Jako struktura nie może być pusta. Dlaczego jest to dozwolone w VB?

--- VB.NET -----

Module Module1 

    Sub Main() 
     Dim d As Date = Nothing 
     Dim dt As DateTime = Nothing 

     d = CType(MyDate, DateTime) 


    End Sub 

    Public ReadOnly Property MyDate As DateTime 
     Get 
      Return Nothing 
     End Get 
    End Property 

End Module 

--- C# .NET -----

class Program 
    { 
     static void Main(string[] args) 
     { 
      DateTime dt = null;//compile time error    
     } 
    } 
+0

Zobacz http://stackoverflow.com/questions/798121/date-vs-datetime – Steve

+1

@musefan: ok, ale w VB.NET możesz napisać "Dim dt As Date? = Nic ". Jaka jest różnica? –

+0

@TimSchmelter: Bardzo odpowiednio nazwany "Dim" jest różnicą. Wiem, że fajne dzieci mają kiedykolwiek leniwy "var", ale moja ślepa nienawiść do VB nie musi być poparta rozumem, po prostu muszę upewnić się, że wykonuję swoją część i wydawać właściwe dźwięki, gdy tylko nadarzy się okazja. .. #CutForVB – musefan

Odpowiedz

13

Nothing w VB.NET nie jest taki sam jak null w języku C#. Ma on również funkcję default w języku C# i dzieje się tak, gdy używa się go na strukturze takiej jak System.DateTime.

więc zarówno Date i DateTime odnoszą się do tej samej struktury System.DateTime i

Dim dt As Date = Nothing 

rzeczywiście jest taka sama jak

Dim dt = Date.MinValue 

lub (w języku C#)

DateTime dt = default(DateTime); 
+1

Ta kompatybilność z poprzednimi wersjami to suka ... :-( –

+0

Zawsze uważam za zabawne, gdy ludzie mówią: "Dlaczego te języki nie są identyczne!", Jeśli chodzi o to, że gdyby były identyczne, jedyna różnica byłaby końcem słowa, których używasz, aby to zrobić ... – RhysW

+1

+1 nie wiedział, że Nic nie jest takie samo jak zero –

3

w C# Możesz użyć słowa kluczowego default

DateTime dt = default(DateTime); 

Date i DateTime są takie same w VB.NET. Date tylko alias z DateTime

3

w VB.NET Date jest po prostu za DateTimealias.

Niektóre aliasy występujące w VB służą do celów związanych z konwersjami z aplikacji vb6.