Es ist einfach, ungerade Zahlen wie 0
, 1
oder 5
zu verfolgen. Ich war damals sehr streng, als ich Low-Level-C-Code schrieb. Da ich mehr mit allen String-Literalen arbeite, die mit XML und SQL zu tun haben, breche ich oft die Regel der Einbettung von Konstanten in Code, zumindest wenn es sich um String-Literale handelt. (Ich bin immer noch gut über numerische Konstanten.)Werden String-Konstanten überbewertet?
Strings sind nicht das Gleiche wie Zahlen. Es ist mühsam und ein wenig albern, eine Kompilierzeitkonstante zu erzeugen, die den gleichen Namen wie ihr Wert hat (zB const string NameField = "Name";
), und obwohl die Wiederholung des gleichen Zeichenkettenliterals an vielen Stellen riskant erscheint, gibt es kaum eine Chance auf einen Tippfehler Kopieren und Einfügen, und wenn ich umgestalte, mache ich normalerweise eine globale Suche, bei der mehr als nur der Name der Sache geändert wird, etwa wie sie funktional in Bezug auf die Dinge behandelt wird.
Nehmen wir an, Sie haben keinen guten XML-Serializer (oder sind nicht in der Stimmung, einen zu erstellen). Welche davon würden Sie persönlich verwenden (wenn Sie nicht auf Peer-Druck in einigen Code-Review zu beugen versuchten):
static void Main(string[] args)
{
// ...other code...
XmlNode node = ...;
Console.WriteLine(node["Name"].InnerText);
Console.WriteLine(node["Color"].InnerText);
Console.WriteLine(node["Taste"].InnerText);
// ...other code...
}
oder:
class Fruit
{
private readonly XmlNode xml_node;
public Fruit(XmlNode xml_node)
{
this.xml_node = xml_node;
}
public string Name
{ get { return xml_node["Name"].InnerText; } }
public string Color
{ get { return xml_node["Color"].InnerText; } }
public string Taste
{ get { return xml_node["Taste"].InnerText; } }
}
static void Main(string[] args)
{
// ...other code...
XmlNode node = ...;
Fruit fruit_node = new Fruit(node);
Console.WriteLine(fruit_node.Name);
Console.WriteLine(fruit_node.Color);
Console.WriteLine(fruit_node.Taste);
// ...other code...
}
0 ist keine ungerade Zahl, es ist sogar :-) – paxdiablo