2017-07-27 2 views
0

Ich habe eine Visual Studio-Lösung, die viele Konsolenanwendungsprojekte enthält. Für jede dieser Konsolenanwendungen wird beim Beenden der Funktion Main erwartet, dass sie einen Wert aus einer benutzerdefinierten Exitcode-Enumeration zurückgibt.Ist es möglich, die Main-Methodensignatur in einer Konsolenanwendung anzupassen?

Im Moment ist die Main Funktionssignatur nur int Main. Wenn wir also einen Wert von unserem enum zurückgeben, müssen wir derzeit den enum Wert an int übergeben. Wir verlieren ein wenig erzwungene statische Analyse, weil wir nicht angeben können, dass Main eine Signatur von CustomEnum Main haben muss.

Ist es möglich, eine benutzerdefinierte Main Signatur irgendwie zu spezifizieren, damit wir diese kompilierte Zeitcodeanalyse ausnutzen können?

+1

Rayn, werfen Sie einfach den Rückgabewert 'customEnum' !!!! –

+1

Was @combo_ci sagte. Ich kratze meinen Kopf hier und frage mich, warum Sie nicht einfach den Wert vor der Verwendung werfen können ... – JuanR

+0

Sie können. Das ist, was ich tue. Ich hatte gehofft, Compile-Zeit Einschränkungen für den Rückgabetyp von "Main" auferlegen, aber so können wir Entwickler helfen, daran zu erinnern, den richtigen Enum-Typ zurückzugeben. – Ryan

Antwort

3

Nope. Es muss void oder int als Rückgabetyp haben. Sie können eine ENUM gecastet in einem int zurückgeben, aber:

public enum Spork 
{ 
    A, 
    B 
} 

class Program 
{ 
    static int Main(string[] args) 
    { 
     return (int)Spork.A; 
    } 
} 

Nichts hindert Sie daran, einen Adapter für den Einstiegspunkt zu machen, aber:

public enum Spork 
{ 
    A, 
    B 
} 

class Program 
{ 
    static int Main(string[] args) 
    { 
     return (int)Spoooon(args); 
    } 

    /* 
    * Our 'actual' entry point for static analysis purposes 
    */ 
    static Spork Spoooon(string[] args) 
    { 
     return Spork.A; 
    } 
} 
+0

Ich denke, er meint, dass er den Wert ** außerhalb ** jeder Konsolen-App mit dem Typ der Enumeration verbrauchen muss. Ich frage mich, warum er es nicht einfach werfen wird? – JuanR

+2

Er sagt in der Frage, dass er kann, aber ihre statische Analyse-Tools funktionieren nicht richtig. Ich stimme deinem ersten Satz nicht zu und frage mich, woher du diese Idee hast. Auf jeden Fall frag * ihn *, nicht ich. – Amy

+0

Ich kann es umwandeln und es derzeit umwandeln. Ich habe mich einfach gewundert, ob es eine Möglichkeit gäbe, Kompilierungszeitbeschränkungen für den Rückgabetyp von "Main" zu erzwingen, so dass Entwickler, die an dieser Lösung arbeiten, weiterhin daran denken, die richtige Enumeration als Rückgabewert von 'Main' zu verwenden. – Ryan

Verwandte Themen