2016-09-14 10 views
4

fand ich diesen CodeWas bedeutet neu [] {a, b} und erstellen?

Stream foo() 
{ 
    ... 
    return new MemoryStream(new[] { a, b }); 
} 

und erraten, was es tut, kann aber keine Erklärung finden, warum die Typdefinition byte[] verzichtet werden kann. Ich sah msdn C# new Erklärung, aber das ist zu einfach dort.

+1

Es schafft eine 'MemoryStream' Instanz, die zwei Bytes enthält:' a' und 'b' –

+4

Die Art der Anordnung kann aus den Argumenten, die die beiden Bytes sind, abgeleitet werden, so dass die Array ist ein 'Byte []'. Dies ist ein [implizit typisiertes Array] (https://msdn.microsoft.com/en-us/library/bb384090.aspx) –

+2

http://stackoverflow.com/questions/5678216/all-possible-c-sharp- Array-Initialisierungs-Syntaxen –

Antwort

1

kann ich erraten, was es tut

Du hast recht, es ist die gleiche wie new byte[] { a, b } ist

ich keine Erklärung finden, warum die Typdefinition byte[] verzichtet werden kann

Der Grund, warum es weggelassen werden kann, ist, dass sowohl a und b sind vom Typ byte. Der Compiler ist intelligent genug, um herauszufinden, dass Sie ein Array von byte s erstellen wollten, so dass Sie nicht aufgefordert werden, den Typ explizit anzugeben.

Microsoft erklärt diese Abkürzung here. Die Idee ist ähnlich dem Verzicht auf den Typ in Deklarationen, die var verwenden, wenn der tatsächliche Typ aus dem Initialisierungskontext abgeleitet werden kann.

2

Die Typdefinition kann weggelassen werden, da sie aus dem Typ der Objekte in der Liste abgeleitet werden kann.

Der C# -Compiler macht eine Menge Arbeit, indem er den Code analysiert, während er kompiliert, um zu überprüfen, dass das, was Sie schreiben, gültig ist und ausgeführt wird, wie Sie es beabsichtigen. Sie können immer noch Fehler machen, aber (hoffentlich) weniger als in Sprachen wie C oder C++.