我一直在写一些逻辑来根据某些条件设置属性。我想以更好的方式改进以下逻辑:
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;
}
答案 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