对嵌套输出重用相同的POCO类



我有一个。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,则只返回其TotalValueTypeB中的值无论是否为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);
}
} 

最新更新