首页 > 解决方案 > Net Core:解决“添加一种方法来打破此属性访问器的递归”

问题描述

我正在尝试创建一个简单的类。ColumnSort 成员是以逗号分隔的文本“Car,Book,Food”中的项目列表。

ColumnSortList 创建一个列表

  1. 食物

C# 和 SonarQube 提到了诸如错误之类的项目

获取:添加一种方法来打破此属性访问器的递归。

Set:在此属性集访问器声明中使用“值”参数

我将如何解决这些问题以使警告/错误(在 SonarQube 中)消失?也可以使代码更高效。

注意: columnSortList 纯粹应该是 ColumnSort 字符串中的只读计算字段。

public class PageModel
{
    public int Page { get; set; }
    public int Limit { get; set; }
    public string ColumnSort { get; set; }

    public IEnumerable<string> columnSortList
    {
        get
        {
            return columnSortList;
        }
        set
        {
            if (ColumnSort == null)
            {
                columnSortList = null;
            }
            else
            {
                columnSortList = ColumnSort.Split(',')
                             .Select(x => x.Trim())
                             .Where(x => !string.IsNullOrWhiteSpace(x))
                             .AsEnumerable();
            }
        }
    }

标签: c#linqgenerics.net-coresonarqube

解决方案


如果columnSortList打算纯粹是只读的,从 计算ColumnSort,那么你根本不应该有一个set方法。所有的逻辑都应该像这样进入get

public IEnumerable<string> columnSortList
{
    get
    {
        if (ColumnSort == null)
        {
            return Enumerable.Empty<string>();
        }
        else
        {
            return ColumnSort.Split(',')
                             .Select(x => x.Trim())
                             .Where(x => !string.IsNullOrWhiteSpace(x))
                             .AsEnumerable();
        }
    }
}

推荐阅读