Reino: Code Quality

Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.

Code Correctness: Readonly Collection Reference

Abstract
A palavra-chave "readonly" impõe a regra de que a variável deve ser inicializada, pois está declarada ou no construtor e não pode ser modificada em nenhum outro lugar. Isso funciona conforme esperado para tipos de valores, mas o conteúdo de objetos e listas ainda é modificável, mesmo tendo sido declarado como somente leitura privado.
Explanation
Retornar uma variável de lista private readonly de uma propriedade somente "getter" permite que o código de chamada modifique o conteúdo da lista, fornecendo a ela eficazmente acesso de gravação e contrariando as intenções do programador que a tornou private readonly.

Exemplo 1: O código a seguir contém uma lista _item, que é declarada como private readonly.

class Order
{
private readonly List<string> _item = new List<string>();
public IEnumerable<string> Item { get { return _item; } }

public Order()
{
/*class initialize */
}

/*some important function......*/
}
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
desc.structural.dotnet.code_correctness_readonly_collection_reference