C#:逻辑实现改进以及性能

时间:2015-12-05 16:49:25

标签: c# .net performance c#-4.0

我一直在写一些逻辑来根据某些条件设置属性。我想以更好的方式改进以下逻辑:

string detail = GetDetail();
if (detail.StartsWith("stackoverflow:"))
{
    detailItem.Stackoverflow = detail.Replace("stackoverflow:", string.Empty).Trim();
    continue;
}
if (detail.StartsWith("google:"))
{
    detailItem.Google = detail.Replace("google:", string.Empty).Trim();
    continue;
}
if (detail.StartsWith("facebook:"))
{
    detailItem.Facebook = detail.Replace("facebook:", string.Empty).Trim();
    continue;
}
if (detail.StartsWith("twitter:"))
{
    detailItem.Twitter = detail.Replace("twitter:", string.Empty).Trim();
    continue;
}

2 个答案:

答案 0 :(得分:5)

您可以在冒号前获取文本并在switch中使用它。获取冒号后的文本,因此您不必重复代码:

string detail = GetDetail();
int index = detail.IndexOf(':');
if (index != -1) {
  string before = detail.Substring(0, index);
  string after = detail.Substring(index + 1).Trim();
  switch (before) {
    case "stackoverflow": detailItem.Stackoverflow = after; break;
    case "google": detailItem.Google = after; break;
    case "facebook": detailItem.Facebook = after; break;
    case "twitter": detailItem.Twitter = after; break;
  }
}

答案 1 :(得分:0)

另一种方法是使用一种方法,将您的标记作为参数并返回值,如

public string GetValue(string token, string text, string defaultValue=null){
   return text.StartsWith(token) ? text.Replace(token, string.Empty).Trim() : defaultValue;
}

你可以这样称呼它

string detail = "google:blablabla";
string result = GetValue("google:",detail, null);

第三个参数可用于放置您想要的任何文本,如果它不是您所期望的,那么您可以传递您的实际值或null或其他字符串

因此,如果您想保留实际值,可以像

一样调用
detailItem.Facebook = GetValue("facebook:",detail, detailItem.Facebook);

这里是一个小提琴的链接,向您显示结果 https://dotnetfiddle.net/LWQY2e