Export (0) Print
Expand All

String.IsInterned Method

Retrieves a reference to a specified String.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

'Declaration
Public Shared Function IsInterned ( _
	str As String _
) As String

Parameters

str
Type: System.String

The string to search for in the intern pool.

Return Value

Type: System.String
A reference to str if it is in the common language runtime intern pool; otherwise, Nothing.

ExceptionCondition
ArgumentNullException

str is Nothing.

The common language runtime automatically maintains a table, called the intern pool, which contains a single instance of each unique literal string constant declared in a program, as well as any unique instance of String you add programmatically by calling the Intern method.

The intern pool conserves string storage. If you assign a literal string constant to several variables, each variable is set to reference the same constant in the intern pool instead of referencing several different instances of String that have identical values.

This method looks up str in the intern pool. If str has already been interned, a reference to that instance is returned; otherwise, Nothing is returned.

Compare this method to the Intern method.

This method does not return a Boolean value. If you call the method because you want a Boolean value that indicates whether a particular string is interned, you can use code such as the following.

Module Example
   Public Sub Main()
      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("'{0}' is in the string intern pool.", 
                              value)
         Else
            Console.WriteLine("'{0}' is not in the string intern pool.",
                              value)                      
         End If 
      Next 
   End Sub 
End Module 
' 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.
NoteNote

Starting with the .NET Framework version 2.0, you can override the use of the intern pool when you use the Ngen.exe (Native Image Generator) to install an assembly to the native image cache on a local computer. For more information, see Performance Considerations in the Remarks section for the Intern property.

The following example demonstrates that literal strings are interned automatically by the compiler.

' Sample for String.IsInterned(String) 
Imports System
Imports System.Text
Imports System.Runtime.CompilerServices

' In the .NET Framework 2.0 the following attribute declaration allows you to  
' avoid the use of the interning when you use NGEN.exe to compile an assembly  
' to the native image cache.
<Assembly: CompilationRelaxations(CompilationRelaxations.NoStringInterning)> 
Class Sample
    Public Shared Sub Main()
        ' String str1 is known at compile time, and is automatically interned. 
        Dim str1 As [String] = "abcd" 

        ' Constructed string, str2, is not explicitly or automatically interned. 
        Dim str2 As [String] = New StringBuilder().Append("wx").Append("yz").ToString()
        Console.WriteLine()
        Test(1, str1)
        Test(2, str2)
    End Sub 'Main

    Public Shared Sub Test(ByVal sequence As Integer, ByVal str As [String])
        Console.Write("{0}) The string, '", sequence)
        Dim strInterned As [String] = [String].IsInterned(str)
        If strInterned Is Nothing Then
            Console.WriteLine("{0}', is not interned.", str)
        Else
            Console.WriteLine("{0}', is interned.", strInterned)
        End If 
    End Sub 'Test
End Class 'Sample '

'This example produces the following results: 

'1) The string, 'abcd', is interned. 
'2) The string, 'wxyz', is not interned. 

'If you use NGEN.exe to compile the assembly to the native image cache, this 
'example produces the following results: 

'1) The string, 'abcd', is not interned. 
'2) The string, 'wxyz', is not interned.

.NET Framework

Supported in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Show:
© 2014 Microsoft