Frage

Ich mag wie etwas tun

IsItAStringLiteral("yes")
var v = "no";
IsItAStringLiteral(v)

Mit dem offensichtlichen Rückgabewert. Ist es möglich?

War es hilfreich?

Lösung

Sie können die string.IsInterned Methode verwenden, um zu bestimmen, ob eine bestimmte Zeichenfolge im Pool .NET intern ist. Alle Stringliterale werden den intern Pool vor der Anwendung automatisch hinzugefügt zu laufen beginnt.

Natürlich, das werden Sie nicht mit Ihren genauen Frage helfen. Variable ‚v‘ eine Stringliteral verweisen, so ist auch sie im internen Pool angezeigt. Warum brauchen Sie eine solche Funktionalität?

Andere Tipps

Nein. Sie werden in der Lage zu sagen, nicht, ob eine Zeichenfolge eine wörtliche ist oder nicht.

Der einfache Grund: Literale, String-Variablen, internierten Strings aller Art .... jeder ist ein Verweis auf eine System.String. Und alle Saiten, wenn sie von Wert übergeben werden auf den Stapel vor dem Funktionsaufruf geladen, dass sie Anwendungen (und damit auf den Namen einer Variablen nicht verwandt sind, dass Verweise sie). Mit der Zeit wird die Funktion aufgerufen, eine wörtliche und einen variablen Look genau das gleiche, und genau das gleiche behandelt werden, wenn sie von Wert übergeben.

Der einzige Weg, möglich sein könnte, sind einige unsafe Sachen, die die Adresse des Objekts überprüfen könnten. Wenn die Adresse innerhalb einer Assembly-Adressraum ist, kam es an Sicherheit grenzender Wahrscheinlichkeit von einer konstanten irgendeiner Art. Aber das ist unzuverlässig (nach Strings Literale wie die Literale aussehen würde), extrem hackish, hässlich, und vor allem unnötige für jeden Zweck, dass ich mir vorstellen kann.

Sie sollten wahrscheinlich überdenken, wie du tust, was du tust, wenn du kümmern, ob ein String eine wörtliche ist oder nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top