如何以更简洁的方式处理此异常?
How to handle this exception in a cleaner way?
我一直在尝试枚举 class 的属性并在字符串列表中获取它们的值。
但是我遇到了一个问题,当属性
的值为 null 时,我得到了一个 NullReferenceException
我设法通过该解决方案修复了该问题,但我仍然不认为这是一个干净的代码。
我想知道这是否可以以更清洁、更专业的方式实施。
private int CalculateScore()
{
var score = 0;
var answers = new List<string>();
foreach (var prop in typeof(TypesSheet).GetProperties())
{
// WHEN STRING IS MISSING IT BREAKS
try
{
var answer = prop.GetValue(_typesSheet).ToString();
answers.Add(answer);
}
catch
{
continue;
}
}
if (_gameMode == GameMode.SinglePlayer)
{
foreach (var answer in answers)
{
if (string.IsNullOrEmpty(answer))
continue;
score = score + 10;
}
return score;
}
}
if (prop.GetValue(_typesheets) != null) {
answers.Add(prop.GetValue(_typesheets));
}
替换:
// WHEN STRING IS MISSING IT BREAKS
try
{
var answer = prop.GetValue(_typesSheet).ToString();
answers.Add(answer);
}
catch
{
continue;
}
与:
var value = prop.GetValue(_typesSheet);
if (null != value)
{
answers.Add(value.toString());
}
错误是由 prop.GetValue(_typesSheet)
引起的,可能是 null
。当你使用 ToString
方法时将得到
nullreferenceexception
您可以尝试使用 linq
而不是 foreach。
var answers =
typeof(TypesSheet).GetProperties()
.Select(x => x.GetValue(_typesSheet))
.Where(x=> x!= null)
.Select(x=> x.ToString());
使用安全导航运算符(在 C# 6 中可用)
var answer = prop.GetValue(_typesSheet)?.ToString();
if (!string.IsNullOrEmpty(answer)) answers.Add(answer);
Linq 版本
var answers = typeof(TypesSheet)
.GetProperties()
.Select(prop => prop.GetValue(_typesSheet)?.ToString())
.Where(answer => !string.IsNullOrEmpty(answer))
.ToList();
我一直在尝试枚举 class 的属性并在字符串列表中获取它们的值。 但是我遇到了一个问题,当属性
的值为 null 时,我得到了一个 NullReferenceException我设法通过该解决方案修复了该问题,但我仍然不认为这是一个干净的代码。
我想知道这是否可以以更清洁、更专业的方式实施。
private int CalculateScore()
{
var score = 0;
var answers = new List<string>();
foreach (var prop in typeof(TypesSheet).GetProperties())
{
// WHEN STRING IS MISSING IT BREAKS
try
{
var answer = prop.GetValue(_typesSheet).ToString();
answers.Add(answer);
}
catch
{
continue;
}
}
if (_gameMode == GameMode.SinglePlayer)
{
foreach (var answer in answers)
{
if (string.IsNullOrEmpty(answer))
continue;
score = score + 10;
}
return score;
}
}
if (prop.GetValue(_typesheets) != null) {
answers.Add(prop.GetValue(_typesheets));
}
替换:
// WHEN STRING IS MISSING IT BREAKS
try
{
var answer = prop.GetValue(_typesSheet).ToString();
answers.Add(answer);
}
catch
{
continue;
}
与:
var value = prop.GetValue(_typesSheet);
if (null != value)
{
answers.Add(value.toString());
}
错误是由 prop.GetValue(_typesSheet)
引起的,可能是 null
。当你使用 ToString
方法时将得到
nullreferenceexception
您可以尝试使用 linq
而不是 foreach。
var answers =
typeof(TypesSheet).GetProperties()
.Select(x => x.GetValue(_typesSheet))
.Where(x=> x!= null)
.Select(x=> x.ToString());
使用安全导航运算符(在 C# 6 中可用)
var answer = prop.GetValue(_typesSheet)?.ToString();
if (!string.IsNullOrEmpty(answer)) answers.Add(answer);
Linq 版本
var answers = typeof(TypesSheet)
.GetProperties()
.Select(prop => prop.GetValue(_typesSheet)?.ToString())
.Where(answer => !string.IsNullOrEmpty(answer))
.ToList();