【发布时间】:2011-07-07 17:33:47
【问题描述】:
我在C# and .net 3.5 中有以下代码,它工作正常,但需要知道这是否可以简化可能是使用 Linq 或其他东西?基本上我正在读取一个 xml 文件来获取列名。然后尝试复制字典对象中的列和序列属性,如果“列的isactive属性为”真“。我在代码的其他部分使用这个字典对象。我循环遍历元素,然后遍历属性并查找列那些是活动的,如果活动我存储序列,最后将列和序列添加到字典中。
var doc = XDocument.Load("DataStructure.xml");
var cols = doc.XPathSelectElements("/datastructure/" + sPageName + "/columns");
Dictionary<string, int> columns = new Dictionary<string, int>();
bool bAddData = true;
int sSequence = 0;
foreach (var col in cols.Elements())
{
foreach (XAttribute at in col.Attributes())
{
if (at.Name.ToString().ToLower().Equals("isactive") && at.Value.ToString() != "true")
{
bAddData = false;
break;
}
bAddData = true;
if (at.Name.ToString().ToLower().Equals("sequence"))
{
sSequence = Convert.ToInt32(at.Value.ToString());
break;
}
}
if (bAddData)
{
columns.Add(col.Name.ToString(), sSequence);
}
}
我确信这是非常糟糕的代码,但我想知道如何改进它。这是xml数据文件。如果我需要重组 xml 以使其变得简单,我可以。
<?xml version="1.0" encoding="utf-8" ?>
<datastructure>
<MyPage>
<columns>
<number isactive="true" sequence="1" />
<curr_code isactive="true" sequence="2" />
<curr_desc isactive="true" sequence="3" />
<tradecurrvalue isactive="true" sequence="4" />
<selectcurrvalue isactive="true" sequence="5" />
</columns>
</MyPage>
</datastructure>
【问题讨论】:
-
为什么?您已经拥有“比 LINQ 更快”的代码版本。
-
@BoltClock,C# 3.5。我以为我没有充分利用 C# 3.5。
-
@Mrchief,我认为 LINQ 可以简化,但可能会更慢且更不灵活。我说的对吗?
-
@user465876:C# 3.5 不存在。它是 3.0 或 4.0...
-
它可能会减少代码行数并产生更短的语法,但它确实会引入开销。最终它会在某个时候被翻译成
foreach。 LINQ 与 lambdas 结合确实可以产生优雅的代码。是不是更简单?这是主观的!