首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.StackOverflowException on BlogEngine.NET

System.StackOverflowException on BlogEngine.NET
EN

Stack Overflow用户
提问于 2013-10-22 17:21:22
回答 3查看 134关注 0票数 0

我正在使用BlogEngine.NET,需要将BlogId设置为特定的Guid (blogIdstr)。我似乎不知道如何从默认的blogId中更改它。这是我目前的代码,但它给了我一个StackOverflowException.

这两个人是基类..。

代码语言:javascript
复制
public virtual TKey Id { get; set; }

public Guid BlogId 
{ 
get 
   { 
       return BlogId; <-- Stack Overflow
   }

set
   {
       string blogIdstr = "FCA96EFB-D51C-4C41-9F85-3EEB9C50BDE7";
       Guid blogIdGuid = Guid.Empty;
       blogIdGuid = Guid.Parse(blogIdstr);
   }
}

这个在blog.cs..。

代码语言:javascript
复制
public override Guid Id
{
get { return base.Id; }
set
{
    base.Id = value;
    base.BlogId = value;
}
}

如何设置blogId并避免StackOverflowException?提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-22 17:40:49

你只需要引入一个支持变量

private Guid _blogId;,并确保在set方法中设置该字段。

代码语言:javascript
复制
public Guid BlogId 
{ 
get 
   { 
       return _blogId; 
   }

set
   {
       string blogIdstr = "FCA96EFB-D51C-4C41-9F85-3EEB9C50BDE7";
       Guid blogIdGuid = Guid.Empty;
       blogIdGuid = Guid.Parse(blogIdstr);

       _blogId = value;
   }
}
票数 0
EN

Stack Overflow用户

发布于 2013-10-22 17:40:50

对于第一个,在BlogId中,您将返回BlogId,它会触发返回的Getter .BlogId。砰,堆叠溢出。在公共getter中返回blogIdGuid而不是BlogId。

我猜第二个是与第一个相关的,但是如果没有更多的代码,我就不能马上说出来。

编辑:喔,误读了代码。是的,使用一个名为_blogId的背景类级属性,并在setter中设置它,然后在getter中返回它。

票数 1
EN

Stack Overflow用户

发布于 2013-10-22 17:35:30

您的get方法正在调用自己,您的set方法实际上是通过设置该方法的本地值来发出no。如果要在getter和setter中执行某些操作,则需要为您的属性提供一个支持字段:

代码语言:javascript
复制
private Guid _blogId;
public Guid BlogId 
{ 
   get 
   { 
       return _blogId;
   }

   set
   {
       //some operation against value here, Validate(value), etc.
       _blogId = value;
   }
}

如果在getter/setter中没有要采取的操作,则可以使用汽车特性,它将为您生成支持字段:

代码语言:javascript
复制
public Guid BlogId { get; set; }

您不能做的事情,以及您在这里真正想要做的事情,就是将一个不同的类型传递到一个属性中--为了做到这一点,您需要在类上使用一个方法,即:

代码语言:javascript
复制
public bool TrySetBlogId(string newId)
{
    Guid id;
    var stringIsGuid = Guid.TryParse(newId, out id);

    if (stringIsGuid)
    {
        BlogId = id;
    }

    return stringIsGuid;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19524408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档