Kap*_*old 3 c# refactoring ternary-operator
我有这个代码:
_viewModel.PhoneDefault = user == null ? "" :
(string.IsNullOrEmpty(user.PhoneDay) ?
(string.IsNullOrEmpty(user.PhoneEvening) ?
(string.IsNullOrEmpty(user.Mobile) ? "" :
user.Mobile) :
user.PhoneEvening) :
user.PhoneDay);
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来编写它以使其更具可读性?
Gab*_*abe 10
在您的情况下,您可以编写一个辅助函数,如下所示:
// return the first parameter that isn't null or empty
public static string CoalesceStrings(params string[] src)
{
foreach (var str in src)
if (!string.IsNullOrEmpty(str))
return str;
return "";
}
Run Code Online (Sandbox Code Playgroud)
然后就这样打电话,就像这样:
_viewModel.PhoneDefault = user == null ? "" :
CoalesceStrings(user.PhoneDay, user.PhoneEvening, user.Mobile);
Run Code Online (Sandbox Code Playgroud)
写一个单独的方法来获取电话号码,如下所示:
public string GetDefaultPhone(User user)
{
if(user == null)
{
return string.Empty;
}
if(!string.IsNullOrEmpty(user.PhoneDay))
{
return user.PhoneDay;
}
if(!string.IsNullOrEmpty(user.PhoneEvening))
{
return user.PhoneEvening;
}
if(!string.IsNullOrEmpty(user.Mobile))
{
return user.Mobile;
}
return string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
然后在你的代码中:
_viewModel.PhoneDefault = GetDefaultPhone(user);
Run Code Online (Sandbox Code Playgroud)
只是回答,因为我没有在任何现有答案中看到我在这种情况下使用的方法。
关于什么...
_viewModel.PhoneDefault = user == null ? string.Empty :
!string.IsNullOrEmpty(user.PhoneDay) ? user.PhoneDay :
!string.IsNullOrEmpty(user.PhoneEvening) ? user.PhoneEvening :
!string.IsNullOrEmpty(user.Mobile) ? user.Mobile :
string.Empty;
Run Code Online (Sandbox Code Playgroud)
您必须在开始时检查用户是否为空,这很不方便,因为这会强制重复string.Empty,但尽管如此,我认为它还是很有可读性的。
我的两分钱;)
| 归档时间: |
|
| 查看次数: |
14685 次 |
| 最近记录: |