2016-08-17 3 views
0

Short VersionWie kombiniere ich `var` und` const`?

In C++ ich dies tun könnte ...

const auto & help_id = help_type.functionHelpTypeId; 

Wie kann ich das in C#?


Long Version

Wie kann ich eine Variable sein ein Nur-Lese-Alias ​​für eine Klasse Feld oder eine Eigenschaft in C# zu machen?

Ich habe eine Methode, bei der ich schreibgeschützte Aliase oben in meiner Funktion mache, um den Rest des Codes ein wenig übersichtlicher zu gestalten und später etwas Tipparbeit zu sparen.

 var help_id = help_type.functionHelpTypeId; 
     var changeset_version = changeset.version; 
     var helpPageType = help_type.helpPageType; 
     // &ct. 

Mein Problem ist, dass, da diese nicht const sind, jemand sie neu zuweisen könnten oder die Objekte mutieren sie sich beziehen, die nicht meine Absicht ist. Um zu wissen, dass dies nur readonly Aliase für Klassenfelder sind, müsste man grundsätzlich die ganze Funktion studieren, was nicht in Ordnung ist.

+1

Kurze Antwort: Sie können nicht. Lange (er) Antwort: Sie können 'readonly' verwenden, wenn Sie die Werte in Ihrem Objektkonstruktor setzen. – DavidG

+1

Was ist falsch bei der Verwendung von 'const' und explizite Typ-Deklaration? Hast du das probiert? 'const int help_id = help_type.functionHelpTypeId;' – Shyju

+0

Durch "jeder könnte neu zuweisen ..." meinst du, dass du dir Sorgen machst, dass die Betreuer deines Codes versauen? Sie könnten einen Code-Kommentar hinzufügen, in dem Sie die Variablen deklarieren und zuweisen. – adv12

Antwort

2

Sie können nicht: "Implizit typisierte lokale Variablen können nicht konstant sein".

Verwenden Sie einfach den expliziten Typ für const.

Weitere Diskussion: Type-inferring a constant in C#

1

@ Antwort AlexeiLenkov ist als Ergänzung, können Sie immer noch einen anonymen Typen, deren Eigenschaften nur lesbar erstellen:

var help = new 
{ 
    help_id = help_type.functionHelpTypeId, 
    changeset_version = changeset.version, 
    helpPageType = help_type.helpPageType, 
}; 

help.help_id = 312; // CS0200: It is readonly 

Dies kann jedoch nur in der lokalen Rahmen verwendet werden. Beachten Sie auch, dass Referenztypen veränderbar sind und help selbst ebenfalls ein Referenztyp ist.

+0

Die 'help'-Variable kann immer noch mutiert werden. Der Wert, den es referenziert, kann nicht sein, aber die Variable selbst kann sein. – Servy

+0

@Servy Ich habe nicht gesagt, dass es nicht war. In der Tat wird sogar angedeutet, dass es veränderbar ist, da "Hilfe" ein Referenztyp ist. Vielleicht sollte ich das umschreiben, um es klarzustellen. – Xiaoy312

+0

Sie haben gesagt, dass der Typ veränderbar ist, wenn nicht, und Sie haben eine änderbare Variable angegeben, wenn die Frage speziell nach einer Variable fragt, die * nicht * änderbar ist. – Servy

Verwandte Themen