2010-07-16 9 views
16

Ich suchte these SO results und konnte nichts zu meiner Frage finden. Ich bezweifle, dass dies ein Duplikat sein könnte.System.Type.Missing oder System.Reflection.Missing.Value beim Arbeiten mit Office PIA?

Ich schreibe gerade einen Microsoft.Office.Interop.Excel PIA-Wrapper in .NET C# 3.5 und fragte mich, was man am besten beim Aufrufen von Methoden wie Öffnen einer bestimmten Arbeitsmappe verwenden sollte.

System.Type.Missing oder Missing.Value?

Ich habe ein paar Google-Suche durchgeführt wird, und keinen Unterschied feststellen kann, mit der Ausnahme, dass man aus dem System Namespace (System.Type.Missing), und die andere (Missing.Value) stammt aus der System.Reflection Namensraum.

  1. Was ist der Hauptunterschied zwischen beiden?
  2. Unter welchen Umständen ist man am besten zu verwenden als die anderen?
  3. Warum ist das so?

Beide scheinen zu verwenden, wenn Sie einen Parameterstandardwert auf der Interop-Assembly ...

Vielen Dank für Ihre Antworten übergeben möchten! =)

Antwort

17

Sie sind gleich. In dem statischen Initialisierer Type ist das Feld Missing auf System.Reflection.Missing.Value festgelegt.

Warum gibt es zwei Möglichkeiten, um den gleichen Wert zu bekommen: wer weiß. Es ist ziemlich wahrscheinlich, dass dies ein Rückwärtskompatibilitätsrest ist, da Type.Missing als object typisiert ist, wohingegen Missing.Value als Missing getippt ist.

+0

Wo haben Sie festgestellt, dass sie tatsächlich gleich waren, und interessanterweise, wo haben Sie herausgefunden, dass Type.Missing auf Missing.Value gesetzt wurde? Vielen Dank! =) –

+1

Es gibt dieses wunderbare Werkzeug namens Reflector :-) Dies ermöglicht es Ihnen, den (kompilierten) Code jeder .NET Assembly zu betrachten. Sie können aber auch versuchen, ILDASM (Teil des SDK) zu verwenden und sich den ** .cctor ** von ** Type ** anzusehen. Es ist die erste Aussage. – Ruben

+2

Bleibt nur noch Ihre Antwort zu akzeptieren! =) Danke! =) –