首页 > 解决方案 > 请求模型引发堆栈溢出 - .NET

问题描述

我有模型 NewOrderModel:

public class NewOrderModel
{
    private readonly List<KeyValuePair<string, string>> symbols = 
        new List<KeyValuePair<string, string>>
        {
            new KeyValuePair<string, string> ("WINZ19", "XBMF"),
            new KeyValuePair<string, string> ("WDOZ19", "XBMF")
        };

    [Required]
    public string symbol
    {
        get => symbol;
        set
        {
            market = this.symbols.Find(findSymbol => findSymbol.Key == symbol).Value;
            symbol = value;
        }
    }

    public string market
    {
        get => market;
        private set
        {
            market = value;
        }
    }
}

收到请求后,交易品种的值会加载市场字段。

但是当这个模型在控制器中被调用时,它会引发堆栈溢出(哦,具有讽刺意味)。我怀疑这可能是某种递归,但我不明白它是怎么回事。

谁能指出我在这里做错了什么?

标签: c#asp.net

解决方案


您的财产获取者正在呼唤他们自己。您需要将值存储在支持字段中。

公共属性也遵循 PascalCase 约定

我不知道您在 Symbol setter 中尝试了什么,也许应该是(请注意,如果符号列表中不存在符号值,您将需要添加异常管理):

try {
   Market = this.symbols.Find(findSymbol => findSymbol.Key == value).Value;
   _symbol = value;
} catch {
   //Do exception handling
}

这里是完整的代码:

public class NewOrderModel
{
   private readonly List<KeyValuePair<string, string>> symbols = new List<KeyValuePair<string, string>>
   {
      new KeyValuePair<string, string> ("WINZ19", "XBMF"),
      new KeyValuePair<string, string> ("WDOZ19", "XBMF")
   };

  private string _symbol;

  [Required]
  public string Symbol
   {
      get => _symbol;

      set
       {
          Market = this.symbols.Find(findSymbol => findSymbol.Key == value).Value;
          _symbol = value;
        }
    }

    private string _market;   
    public string Market
        {
            get => _market;

            private set
            {
                _market = value;
            }
        }

推荐阅读