C#:逻辑实现与性能一起改进

C#:逻辑实现与性能一起改进,c#,.net,performance,c#-4.0,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:")) {

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

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;
}

您可以在冒号之前获取文本,并在
开关中使用它。也可以在冒号后获取文本,这样就不必重复代码:

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;
  }
}

您可以在冒号之前获取文本,并在
开关中使用它。也可以在冒号后获取文本,这样就不必重复代码:

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;
  }
}

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

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);
这里是一个小提琴的链接,向您展示结果

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

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);
这里是一个小提琴的链接,向您展示结果

使用子字符串而不是替换使用子字符串而不是替换