String.IsInterned(String) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Haalt een verwijzing naar een opgegeven String.
public:
static System::String ^ IsInterned(System::String ^ str);
public static string IsInterned(string str);
static member IsInterned : string -> string
Public Shared Function IsInterned (str As String) As String
Parameters
- str
- String
De tekenreeks die moet worden gezocht in de interne pool.
Retouren
Een verwijzing naar str of deze zich in de algemene taalruntime-internpool bevindt, nullanders.
Uitzonderingen
str is null.
Voorbeelden
In het volgende voorbeeld ziet u hoe u kunt gebruiken IsInterned om te controleren of tekenreeksen zich in de interne pool bevinden en om de gelijkheid van interne tekenreeksen te controleren.
// Sample for String.IsInterned(String)
using System;
using System.Text;
class Sample
{
public static void Main()
{
// Constructed strings are not automatically interned.
string s1 = new StringBuilder().Append("My").Append("Test").ToString();
string s2 = new StringBuilder().Append("My").Append("Test").ToString();
// Neither string is in the intern pool yet.
Console.WriteLine($"Is s1 interned? {String.IsInterned(s1) != null}");
Console.WriteLine($"Is s2 interned? {String.IsInterned(s2) != null}");
// Intern s1 explicitly.
string i1 = String.Intern(s1);
// Now s2 can be found in the intern pool.
string i2 = String.IsInterned(s2);
Console.WriteLine($"Is s2 interned after interning s1? {i2 != null}");
Console.WriteLine($"Are i1 and i2 the same reference? {Object.ReferenceEquals(i1, i2)}");
}
}
// This example produces the following results:
//
// Is s1 interned? False
// Is s2 interned? False
// Is s2 interned after interning s1? True
// Are i1 and i2 the same reference? True
// Sample for String.IsInterned(String)
open System
open System.Text
// Constructed strings are not automatically interned.
let s1 = StringBuilder().Append("My").Append("Test").ToString()
let s2 = StringBuilder().Append("My").Append("Test").ToString()
// Neither string is in the intern pool yet.
printfn $"Is s1 interned? {String.IsInterned(s1) <> null}"
printfn $"Is s2 interned? {String.IsInterned(s2) <> null}"
// Intern s1 explicitly.
let i1 = String.Intern(s1)
// Now s2 can be found in the intern pool.
let i2 = String.IsInterned(s2)
printfn $"Is s2 interned after interning s1? {i2 <> null}"
printfn $"Are i1 and i2 the same reference? {Object.ReferenceEquals(i1, i2)}"
// This example produces the following results:
//
// Is s1 interned? False
// Is s2 interned? False
// Is s2 interned after interning s1? True
// Are i1 and i2 the same reference? True
' Constructed strings are not automatically interned.
Dim s1 As String = New StringBuilder().Append("My").Append("Test").ToString()
Dim s2 As String = New StringBuilder().Append("My").Append("Test").ToString()
' Neither string is in the intern pool yet.
Console.WriteLine($"Is s1 interned? {String.IsInterned(s1) IsNot Nothing}")
Console.WriteLine($"Is s2 interned? {String.IsInterned(s2) IsNot Nothing}")
' Intern s1 explicitly.
Dim i1 As String = String.Intern(s1)
' Now s2 can be found in the intern pool.
Dim i2 As String = String.IsInterned(s2)
Console.WriteLine($"Is s2 interned after interning s1? {i2 IsNot Nothing}")
Console.WriteLine($"Are i1 and i2 the same reference? {Object.ReferenceEquals(i1, i2)}")
' This example produces the following results:
'
' Is s1 interned? False
' Is s2 interned? False
' Is s2 interned after interning s1? True
' Are i1 and i2 the same reference? True
Opmerkingen
De algemene taalruntime onderhoudt automatisch een tabel, de interne pool, die één exemplaar bevat van elke unieke letterlijke tekenreeksconstante die in een programma is gedeclareerd, evenals een uniek exemplaar van String u programmatisch toevoegen door de Intern methode aan te roepen.
De interne pool bespaart tekenreeksopslag. Als u een letterlijke tekenreeksconstante toewijst aan verschillende variabelen, wordt elke variabele ingesteld om te verwijzen naar dezelfde constante in de interne pool in plaats van te verwijzen naar verschillende exemplaren van String die identieke waarden.
Met deze methode wordt gezocht str in de interne pool. Als deze al is geïnterneerd, wordt een verwijzing naar dat exemplaar geretourneerd. null Anders str wordt deze geretourneerd.
Vergelijk deze methode met de Intern methode.
Deze methode retourneert geen Booleaanse waarde. Als u de methode aanroept omdat u een Booleaanse waarde wilt die aangeeft of een bepaalde tekenreeks is geïnterneerd, kunt u code zoals het volgende gebruiken.
using System;
public class Example
{
public static void Main()
{
string str1 = "a";
string str2 = str1 + "b";
string str3 = str2 + "c";
string[] strings = { "value", "part1" + "_" + "part2", str3,
String.Empty, null };
foreach (var value in strings) {
if (value == null) continue;
bool interned = String.IsInterned(value) != null;
if (interned)
Console.WriteLine("'{0}' is in the string intern pool.",
value);
else
Console.WriteLine("'{0}' is not in the string intern pool.",
value);
}
}
}
// The example displays the following output:
// 'value' is in the string intern pool.
// 'part1_part2' is in the string intern pool.
// 'abc' is not in the string intern pool.
// '' is in the string intern pool.
open System
let str1 = "a"
let str2 = str1 + "b"
let str3 = str2 + "c"
let strings =
[| "value"; "part1" + "_" + "part2"; str3
String.Empty; null |]
for value in strings do
if value <> null then
let interned = String.IsInterned(value) <> null
if interned then
printfn $"'{value}' is in the string intern pool."
else
printfn $"'{value}' is not in the string intern pool."
// The example displays the following output:
// 'value' is in the string intern pool.
// 'part1_part2' is in the string intern pool.
// 'abc' is not in the string intern pool.
// '' is in the string intern pool.
Dim str1 As String = "a"
Dim str2 As String = str1 + "b"
Dim str3 As String = str2 + "c"
Dim strings() As String = {"value", "part1" + "_" + "part2", str3,
String.Empty, Nothing}
For Each value In strings
If value Is Nothing Then Continue For
Dim interned As Boolean = (String.IsInterned(value) IsNot Nothing)
If interned Then
Console.WriteLine($"'{value}' is in the string intern pool.")
Else
Console.WriteLine($"'{value}' is not in the string intern pool.")
End If
Next
' The example displays the following output:
' 'value' is in the string intern pool.
' 'part1_part2' is in the string intern pool.
' 'abc' is not in the string intern pool.
' '' is in the string intern pool.