我在C#中有这种代码,如果有更好的解决方案来计算public static string ConvertStringToUnicode(string inputString)
{
try
{
return Regex.Replace(inputString, "&", "\uff06").Replace("\"", "\uff02");
}
catch (Exception ex)
{
throw;
}
}
属性,我很有意思:
Name
有没有办法不为dictItem.valueElement.Select(li => new ItemWithNameAndUrl {
Name = StringParser.getBeforeString("(", li.InnerText) == string.Empty ?
li.InnerText : StringParser.getBeforeString("(", li.InnerText), //don't like it
Url = li.Element("a").Attributes["href"].Value
}).ToList());
属性调用StringParser.getBeforeString
方法两次?
答案 0 :(得分:5)
您可以在变量中显式打开选择和存储结果中的范围:
var result = dictItem.valueElement.Select(li => {
var name = StringParser.getBeforeString("(", li.InnerText);
return new ItemWithNameAndUrl {
Name = name == string.Empty?li.InnerText : name,
Url = li.Element("a").Attributes["href"].Value
}
}).ToList());
或者,如果您需要查询语法,请使用let
关键字:
var result = (from li in dictItem.valueElement
let name = StringParser.getBeforeString("(", li.InnerText)
select new ItemWithNameAndUrl {
Name = name == string.Empty ? li.InnerText : name,
Url = li.Element("a").Attributes["href"].Value
}).ToList();
答案 1 :(得分:1)
一种方法是使用IndexOf
查看是否存在'('
:
Name = li.InnerText.IndexOf('(') < 0 ? li.InnerText : StringParser.getBeforeString("(", li.InnerText)
另一种方法是使用正则表达式而不是StringParser.getBeforeString
:
Name = Regex.Replace(li.InnerText, "(.*$", "")
两种方法都假设StringParser.getBeforeString
方法在指定的分隔符之前获取字符串的内容。