C#:将字符串传递给下面的函数
本文关键字:函数 字符串 | 更新日期: 2023-09-27 18:29:07
我们如何将字符串内容传递给下面的"comparer"函数?
public static void Sort(XmlNodeList nodes, Comparison<XmlElement> comparer)
{
// The nodes.Count == 0 will break the nodes[0].ParentNode,
// the nodes.Count == 1 is pure optimization :-)
if (nodes.Count < 2)
{
return;
}
var parent = nodes[0].ParentNode;
var list = new List<XmlElement>(nodes.Count);
foreach (XmlElement element in nodes)
{
list.Add(element);
}
list.Sort(Comparer);
foreach (XmlElement element in list)
{
// You can't remove in the other foreach, because it will break
// the childNodes collection
parent.RemoveChild(element);
parent.AppendChild(element);
}
}
public static int Comparer(XmlElement a, XmlElement b,str strAttributeName)
{
int aaa = int.Parse(a.Attributes["aa"].Value);
int aab = int.Parse(b.Attributes["aa"].Value);
int cmp = aaa.CompareTo(aab);
if (cmp != 0)
{
return cmp;
}
int ba = int.Parse(a.Attributes["b"].Value);
int bb = int.Parse(b.Attributes["b"].Value);
cmp = ba.CompareTo(bb);
return cmp;
}
在这里,我想在上面的代码中将a.Attributes["aa"].Value
作为a.Attributes[strAttributeName].Value
,使其更通用。我们该怎么做?
请帮忙。
您正试图通过添加XML属性名称作为参数来提高Comparer
函数的通用性。但是,这样做会更改函数的签名,使其不再与List.Sort(Comparison<T> comparison)
所需的委托的签名匹配。
幸运的是,您可以用lambda替换list.Sort(Comparer)
,这样您就可以向函数Comparer
传递额外的参数。传递"aa"
作为属性名称:
list.Sort((a, b) => Comparer(a, b, "aa"));
传递"b"
作为属性名称:
list.Sort((a, b) => Comparer(a, b, "b"));
public static int Comparer(XmlElement a, XmlElwment b, string strAttributeName)
您应该能够执行以下操作:
string strAttributeName = "aa"; //Or dynamically set the value
list.Sort((a, b) => Comparer(a, b, strAttributeName));
此外,您需要将Copare方法更正为
public static int Comparer(System.Xml.XmlElement a, System.Xml.XmlElement b,
string strAttributeName)
因为"str"在C#中无效。