Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
TypeName |
PropertiesShouldNotReturnArrays |
CheckId |
CA1819 |
Category |
Microsoft.Performance |
Breaking Change |
Breaking |
Cause
A public or protected property in a public type returns an array.
Rule Description
Arrays returned by properties are not write-protected, even if the property is read-only. To keep the array tamper-proof, the property must return a copy of the array. Typically, users will not understand the negative performance implications of calling such a property. Specifically, they might use the property as an indexed property.
How to Fix Violations
To fix a violation of this rule, make the property a method.
When to Exclude Warnings
Do not exclude a warning from this rule.
Example
The following example shows a property that violates this rule. The Main method illustrates how a user might write poorly performing code using such a property.
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.
}
}
}
}
}