我有以下条件:
Int32 pageSize = query.PageSize == null ? _apiSettings.DefaultPageSize : (query.PageSize > _apiSettings.PageSizeLimit ? _apiSettings.PageSizeLimit : query.PageSize.Value);
是否可以使用C#6简化此表达式?
答案 0 :(得分:3)
很明显,声明很复杂,我猜你需要所有检查。在同一行中使用三元运算符两次只是让我觉得它不可读。
为了使其更具可读性(因此以某种方式简化它),我只需将逻辑提取为如下方法:
Int32 pageSize = GetPageSize(query.PageSize);
...
In32 GetPageSize(Int32 queryPageSize)
{
if (queryPageSize == null)
return _apiSettings.DefaultPageSize;
if (queryPageSize > _apiSettings.PageSizeLimit)
return _apiSettings.PageSizeLimit;
return queryPageSize;
}
答案 1 :(得分:2)
你不需要C#6中的任何新东西。通常可以使用Math.Max
和Math.Min
进行钳位。如果不进行检查,可以通过传递int.MinValue
或int.MaxValue
来完成夹紧选择。
var pageSize = Math.Min(
query.PageSize ?? _apiSettings.DefaultPageSize,
_apiSettings.PageSizeLimit ?? int.MaxValue);
我假设PageSizeLimit
在这里可以为空,但如果不可以,则只需取出?? int.MaxValue
。
请注意,这并非严格等同:如果DefaultPageSize > PageSizeLimit
,则会产生不同的结果。但是考虑到你的属性名称,这似乎是你不需要支持的场景,或者如果你确实需要支持它,你应将其限制为PageSizeLimit
以及我在这里。
答案 2 :(得分:1)
不,因为这样或那样你必须检查2个条件(空检查和阈值检查)。
然而,你可以这样简化:
Int32 pageSize =
query.PageSize == null
? _apiSettings.DefaultPageSize
: Math.Min(query.PageSize, _apiSettings.PageSizeLimit);
答案 3 :(得分:0)
一个非常简单的简化就是摆脱括号,然后重新格式化:
Int32 pageSize =
query.PageSize == null ? _apiSettings.DefaultPageSize :
query.PageSize > _apiSettings.PageSizeLimit ? _apiSettings.PageSizeLimit :
query.PageSize.Value;
在我看来,这很简单易读。