Retrieves a reference to a specified String.
Namespace:
System
Assembly:
mscorlib (in mscorlib.dll)
Visual Basic (Declaration)
Public Shared Function IsInterned ( _
str As String _
) As String
Dim str As String
Dim returnValue As String
returnValue = String.IsInterned(str)
public static string IsInterned(
string str
)
public:
static String^ IsInterned(
String^ str
)
public static function IsInterned(
str : String
) : String
Return Value
Type:
System..::.StringA String reference to str if it is in the common language runtime "intern pool"; otherwise nullNothingnullptra null reference (Nothing in Visual Basic).
| Exception | Condition |
|---|
| ArgumentNullException |
str is nullNothingnullptra null reference (Nothing in Visual Basic). |
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.
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, nullNothingnullptra null reference (Nothing in Visual Basic) is returned.
Compare this method to the Intern method.
This method does not return a Boolean value, but can still be used where a Boolean is needed.
Note: |
|---|
Starting with the .NET Framework version 2.0, you can override the use of the intern pool when you use the Native Image Generator (Ngen.exe) 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.
// Sample for String.IsInterned(String)
using System;
using System.Text;
using 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 static void Main()
{
// String str1 is known at compile time, and is automatically interned.
String str1 = "abcd";
// Constructed string, str2, is not explicitly or automatically interned.
String str2 = new StringBuilder().Append("wx").Append("yz").ToString();
Console.WriteLine();
Test(1, str1);
Test(2, str2);
}
public static void Test(int sequence, String str)
{
Console.Write("{0}) The string, '", sequence);
String strInterned = String.IsInterned(str);
if (strInterned == null)
Console.WriteLine("{0}', is not interned.", str);
else
Console.WriteLine("{0}', is interned.", strInterned);
}
}
//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.
// Sample for String::IsInterned(String)
using namespace System;
using namespace System::Text;
using namespace 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)];
void Test( int sequence, String^ str )
{
Console::Write( "{0} The string '", sequence );
String^ strInterned = String::IsInterned( str );
if ( strInterned == nullptr )
Console::WriteLine( "{0}' is not interned.", str );
else
Console::WriteLine( "{0}' is interned.", strInterned );
}
int main()
{
// String str1 is known at compile time, and is automatically interned.
String^ str1 = "abcd";
// Constructed string, str2, is not explicitly or automatically interned.
String^ str2 = (gcnew StringBuilder)->Append( "wx" )->Append( "yz" )->ToString();
Console::WriteLine();
Test( 1, str1 );
Test( 2, str2 );
}
//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.
Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360, Zune
The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
.NET Framework
Supported in: 3.5, 3.0, 2.0, 1.1, 1.0
.NET Compact Framework
Supported in: 3.5, 2.0, 1.0
XNA Framework
Supported in: 3.0, 2.0, 1.0
Reference