Frage

lief ich einen Sicherheitscode Analyst ich mich eine Warnung CA2105 mit gefunden . Ich schaute auf den Grad Manipulation Beispiel. Ich wusste nicht, dass Sie int zuweisen [] zu einem Nur-Lese-int. Ich dachte, war nur lesbar wie die C ++ const und macht es illegal.

Die Wie Fix Verstöße schlage ich vor, das Objekt zu klonen (was ich nicht tun wollen) oder ‚Ersetzen Sie das Array mit einer stark typisierte Sammlung, die nicht geändert werden kann‘. Ich klickte auf den Link und sehen ‚Arraylist‘ und das Hinzufügen jedes Element einzeln und es sieht nicht so aus, wie Sie etwas das Hinzufügen von mehr verhindern kann.

Also, wenn ich habe dieses Stück Code, was die einfachste oder bester Weg, es ist ein Nur-Lese-Sammlung zu machen?

public static readonly string[] example = { "a", "b", "sfsdg", "sdgfhf", "erfdgf", "last one"};
War es hilfreich?

Lösung

Der einfachste Weg, um eine Sammlung zu haben, die Sie nicht, ist die Verwendung ändern

Readonlycollection

Beispiel von MSDN:

List<string> dinosaurs = new List<string>();
dinosaurs.Add("Tyrannosaurus");
dinosaurs.Add("Amargasaurus");
dinosaurs.Add("Deinonychus");
dinosaurs.Add("Compsognathus");

ReadOnlyCollection<string> readOnlyDinosaurs = new ReadOnlyCollection<string>(dinosaurs);

Andere Tipps

public static readonly ReadOnlyCollection<string> example
    = new ReadOnlyCollection<string>(new string[] { "your", "options", "here" });

(obwohl es wahrscheinlich immer noch als get Eigentum ausgesetzt werden soll, anstatt zu einem öffentlichen Bereich)

Wenn Sie mit Arrays arbeiten, können Sie

return Array.AsReadOnly(example);

wickeln Sie Ihre Array in einer Nur-Lese-Sammlung.

var readOnly = new ReadOnlyCollection<string>(example);
ReadOnlyCollection<string> readOnlyCollection = 
            new ReadOnlyCollection<string>(example);

Ich war auf der Suche nach einer ähnlichen Lösung, aber ich wollte noch in der Lage sein, um die Sammlung zu ändern, aus dem Innern der Klasse, damit ich die Option wähle hier skizzierte: http://www.csharp-examples.net/readonly-collection/

Kurz gesagt, sein Beispiel ist:

public class MyClass
{
    private List<int> _items = new List<int>();

    public IList<int> Items
    {
        get { return _items.AsReadOnly(); }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top