在函数中使用不必要的/额外的大括号在C#中是一种好的做法吗?

在函数中使用不必要的/额外的大括号在C#中是一种好的做法吗?,c#,C#,我目前正在创建一个编写一些XML的程序,但由于我使用的库,我必须创建许多变量,如: XmlDocument xmlWriter = new XmlDocument(); XmlNode root = xmlWriter.CreateElement("score"); xmlWriter.AppendChild(root); XmlNode apiKey = xmlWriter.CreateElement("APIkey"); apiKey.InnerText = "placeholder";

我目前正在创建一个编写一些XML的程序,但由于我使用的库,我必须创建许多变量,如:

XmlDocument xmlWriter = new XmlDocument();
XmlNode root = xmlWriter.CreateElement("score");
xmlWriter.AppendChild(root);

XmlNode apiKey = xmlWriter.CreateElement("APIkey");
apiKey.InnerText = "placeholder";
root.AppendChild(apiKey);
我有许多元素要创建,就像
API键
一样,这导致了很多变量。因此,为了便于阅读,我考虑用大括号将每个元素括起来,如下所示:

XmlDocument xmlWriter = new XmlDocument();
XmlNode root = xmlWriter.CreateElement("score");
xmlWriter.AppendChild(root);

{
    XmlNode apiKey = xmlWriter.CreateElement("APIkey");
    apiKey.InnerText = "placeholder";
    root.AppendChild(apiKey);
}
apiKey.DoSomething() // Doesn't work because it's out of scope
我相信这会节省一些内存,并在以后对我有所帮助,因为变量不再存在(对IntelliSense有用)

你可以说“只是使用一个函数”,但我只在这个特定的部分使用这段代码(用参数调用一个函数需要一些几乎可以忽略的时间,但无论如何…)


你对此有什么看法?

我看不出这有什么意义。使用单个函数创建一个元素并将其附加到另一个元素(可能带有params属性)似乎是一种方法。它将生成更可读的代码。大概是这样的:

XmlNode CreateAndAppendChild(XmlDocument xmlWriter, XmlNode parent, string name, string innerText, params Tuple<string, string> attributes)
{
    var child = xmlWriter.CreateElement(name);
    foreach(var attribute in attributes)
    {
        child.SetAttribute(attribute.Item1, attribute.Item2);
    }
    child.InnerText = innerText;
    parent.AppendChild(child);
    return child;
}
而不是您当前的代码:

XmlNode apiKey = xmlWriter.CreateElement("APIkey");
apiKey.InnerText = "placeholder";
root.AppendChild(apiKey);
如果要将子元素添加到APIKey:

var apiKey = CreateAndAppendChild(xmlWriter, root, "APIkey", "placeholder");

CreateAndAppendChild(xmlWriter, apiKey , "child", "" Tuple.Create("attributeName", "attributeValue"));

我想通过使用LINQ to XML使代码更简单—您必须使用XmlDocument吗?“我相信这会节省一些内存”—我在不久前也犯了这个错误—只需使用一个方法。把它私有化,如果在其他地方需要它,把它提取到一个单独的类中。是的,我想我会这样做。我的functino将有点不同,虽然我有嵌套元素,但它是可管理的。谢谢:)您可以使用它向任何元素添加子元素,而不仅仅是根元素。这就是它引用父节点的原因……我用一个用法示例编辑了我的答案(还将函数更改为同时接受内部文本并返回它创建的子节点)。
var apiKey = CreateAndAppendChild(xmlWriter, root, "APIkey", "placeholder");

CreateAndAppendChild(xmlWriter, apiKey , "child", "" Tuple.Create("attributeName", "attributeValue"));