属性的 get 方法中的无限循环



>我有一个视图模型,它有一个可枚举的下拉框选择项列表,但在 get 方法中我遇到了无限循环,我该怎么办?

        public IEnumerable<SelectListItem> TargetList
    {
        get
        {
            return TargetList;
        }
        private set
        {
            TargetList = new List<SelectListItem> { new SelectListItem { Value = "Android", Text = "Android" },
                                                    new SelectListItem { Value= "WebGL", Text="WebGL" },
                                                    new SelectListItem { Value= "Windows", Text="Windows" },
                                                    new SelectListItem { Value= "IOS", Text="IOS" }};
        }
    }

这是一个非常奇怪的设置器,因为它不使用你传递给它的任何值。您似乎将 setter 方法与初始化混淆了。试试这个

public IEnumerable<SelectListItem> TargetList{ get; } 
                   = new List<SelectListItem> { new SelectListItem { Value = "Android", Text = "Android" },
                                                new SelectListItem { Value= "WebGL", Text="WebGL" },
                                                new SelectListItem { Value= "Windows", Text="Windows" },
                                                new SelectListItem { Value= "IOS", Text="IOS" }};
该东西不需要有一个二传手,

除非你打算实际将其设置为与类外部不同的值,这不适用于你的原始二传手。

你的得到是调用自己。您需要设置支持字段。

private IEnumerable<SelectListItem> _targetList
public IEnumerable<SelectListItem> TargetList
{
    get
    {
        return _targetList;
    }
    private set
    {
        _targetList = new List<SelectListItem> { new SelectListItem { Value = "Android", Text = "Android" },
                                                new SelectListItem { Value= "WebGL", Text="WebGL" },
                                                new SelectListItem { Value= "Windows", Text="Windows" },
                                                new SelectListItem { Value= "IOS", Text="IOS" }};
    }
}

这里不需要getter或setter的主体。

public class MyClass
{
    public MyClass()
    {
        this.TargetList = new List<SelectListItem> 
        {
            new SelectListItem { Value = "Android", Text = "Android" },
            new SelectListItem { Value= "WebGL", Text="WebGL" },
            new SelectListItem { Value= "Windows", Text="Windows" },
            new SelectListItem { Value= "IOS", Text="IOS" }
         }
     }
     public IEnumerable<SelectListItem> TargetList
     {  get ; private set; }
}

你有一个无限循环的原因是你的getter在非终止条件下递归地调用自己。如果您希望使用一些默认值初始化属性并允许调用代码更改它,则可以使用自动实现属性,例如...

public IEnumerable<SelectListItem> TargetList { get; set; } =
    new List<SelectListItem>
    {
        new SelectListItem() { Value="Android",Text="Android"},
        new SelectListItem() { Value= "WebGL", Text="WebGL" },
        new SelectListItem() { Value= "Windows", Text="Windows" },
        new SelectListItem() { Value= "IOS", Text="IOS" }
    };

这样,您就有了默认项目,并且如果您愿意,仍然可以在运行时将其设置为其他列表。如果您不希望更改列表,则可以不使用属性的set;部分。

相关内容

  • 没有找到相关文章

最新更新