Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
TypeName |
PropertiesShouldNotReturnArrays |
CheckId |
CA1819 |
Kategorie |
Microsoft.Performance |
Unterbrechende Änderung |
Breaking |
Eine öffentliche oder geschützte Eigenschaft in einem öffentlichen Typ gibt ein Array zurück.
Von Eigenschaften zurückgegebene Arrays sind nicht schreibgeschützt, auch wenn die Eigenschaft schreibgeschützt ist. Damit das Array gegen Manipulationen geschützt bleibt, muss die Eigenschaft eine Kopie des Arrays zurückgeben. I. d. R. verstehen die Benutzer nicht, welche negativen Auswirkungen der Aufruf einer solchen Eigenschaft auf die Leistung hat. Insbesondere könnten sie die Eigenschaft als indizierte Eigenschaft verwenden.
Um einen Verstoß gegen diese Regel zu beheben, wandeln Sie die Eigenschaft in eine Methode um.
Schließen Sie keine Warnung dieser Regel aus.
Im folgenden Beispiel wird eine Eigenschaft veranschaulicht, die gegen diese Regel verstößt. Die Main
-Methode verdeutlicht, dass Code bei Verwendung einer solchen Eigenschaft eventuell eine schlechte Leistung bietet.
Imports System
Namespace PerformanceLibrary
Public Class Test
Private nameValues() As String
Public Sub New()
nameValues = New String(100) {}
' Loading string array with sample data.
Dim i As Integer
For i = 0 To 99
nameValues(i) = "Sample"
Next i
End Sub 'New
' Violates rule: PropertiesShouldNotReturnArrays.
Public ReadOnly Property Names() As String()
Get
Return CType(nameValues.Clone(), String())
End Get
End Property
Public Shared Sub Main()
' Using the property in the following manner
' results in 201 copies of the array.
' One copy is made each time the loop executes,
' and one copy is made each time the condition is tested.
Dim t As New Test()
Dim i As Integer
For i = 0 To t.Names.Length - 1
If t.Names(i) = "SomeName" Then
' Perform some operation.
End If
Next i
End Sub 'Main
End Class 'Test
End Namespace
using System;
namespace PerformanceLibrary
{
public class Test
{
string [] nameValues;
public Test()
{
nameValues = new string[100];
// Loading string array with sample data.
for (int i = 0; i< 100; i++)
{
nameValues[i] = "Sample";
}
}
// Violates rule: PropertiesShouldNotReturnArrays.
public string [] Names
{
get
{
return (string[]) nameValues.Clone();
}
}
public static void Main()
{
// Using the property in the following manner
// results in 201 copies of the array.
// One copy is made each time the loop executes,
// and one copy is made each time the condition is tested.
Test t = new Test();
for (int i = 0; i < t.Names.Length ; i++)
{
if (t.Names[i] == ("SomeName"))
{
// Perform some operation.
}
}
}
}
}