Voici une classe qui, lorsqu'il est compilé avec les règles d'analyse de code de minimum de Microsoft recommandé, provoque cet avertissement:avertissement sur CA2002 string []
CA2002: Microsoft.Reliability: 'TestClass.SomeProperty.get()' verrouille sur une référence de type 'chaîne []'. Remplacez ceci par un verrou contre un objet avec une identité forte.
public sealed class TestClass
{
public TestClass(string[] first, string[] second)
{
combinedStrings = Combined(first, second);
}
public string SomeProperty
{
get
{
lock (combinedStrings)
return "A string";
}
}
private readonly string[] combinedStrings;
private static string[] Combined(string[] first, string[] second)
{
var combined = new string[first.Length + second.Length];
first.CopyTo(combined, 0);
second.CopyTo(combined, first.Length);
return combined;
}
}
Pourquoi un tableau de chaînes être considéré comme un type d'identité faible? Ce n'est pas comme si les tableaux étaient internés ou quelque chose, n'est-ce pas? Et même s'ils pouvaient l'être, je ne suis pas en train de m'enfermer sur un système statique; Il est construit de manière dynamique au moment de l'exécution, ce qui le rend unique.
Ceci est sur Visual Studio 2010, si cela fait une différence.
@ M.kazemAkhgary [? Pourquoi est-lock (this) {...} mauvais] (http://stackoverflow.com/questions/251391/why-is- lockthis-bad) – stuartd