我有一个。NET核心API,必须返回以下输出,
{
"TotalValue":200,
"Count":100,
"TypeA":
{
"TotalValue":200,
"Count":100
}
"TypeB":
{
"TotalValue":200,
"Count":100
}
}
我已经尝试了以下方法来实现这一点,
public interface IValue
{
public int TotalValue { get; set; }
public int Count { get; set; }
}
public class Type : IValue
{
public int TotalValue { get; set; }
public int Count { get; set; }
}
public class Test
{
public int TotalValue
{
get
{
return TypeA?.TotalValue ?? 0 + TypeB?.TotalValue ?? 0;
}
}
public int Count
{
get
{
return TypeA?.Count ?? 0 + TypeB?.Count ?? 0;
}
}
public Type TypeA { get; set; }
public Type TypeB { get; set; }
}
但是这些值根本没有被添加,我觉得即使我开始工作,也可以通过这种方式避免很多重复,有没有更优雅的解决方案来实现这一点?
我必须分别设置TypeA和TypeB的值,TypeA的值会被设置,但当我将值设置为TypeB时,不会发生求和。
由于运算符??
的优先级,似乎不会发生求和。当你写这篇文章时:
TypeA?.TotalValue ?? 0 + TypeB?.TotalValue ?? 0;
它实际上可能意味着:
(TypeA?.TotalValue) ?? (0 + TypeB?.TotalValue ?? 0);
因此,如果TypeA
不为null,则只返回其TotalValue
。TypeB
中的值无论是否为null都将被忽略。如果TypeA
为空,而TypeB
不为空。然后返回的值来自TypeB.TotalValue
。
如果您不确定运算符的优先级,则应明确使用圆括号按所需方式对表达式进行分组。这也有助于使表达更加清晰。
要修复它,只需按照你想要的方式分组(据我所知(,如下所示:
public int TotalValue
{
get
{
return (TypeA?.TotalValue ?? 0) + (TypeB?.TotalValue ?? 0);
}
}
public int Count
{
get
{
return (TypeA?.Count ?? 0) + (TypeB?.Count ?? 0);
}
}