gpt4 book ai didi

c# - 带有 getter 和 setter 的 Stackoverflow 错误 C#

转载 作者:太空宇宙 更新时间:2023-11-03 17:09:47 24 4
gpt4 key购买 nike

这是 worker 类(Class):

namespace Lite
{
public class Spec
{
public int ID { get; set; }

public string Name { get; set; }
public string FriendlyName { get; set; }
public int CategoryID { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public string UOM { get; set; }
public int Pagination { get; set; }
public int ColoursFront { get; set; }
public int ColoursBack { get; set; }
public string Material { get; set; }
public int GSM { get; set; }
public string GSMUOM { get; set; }
public bool Seal { get; set; }

public Spec(int ID)
{
using (CrystalCommon.MainContext db = new CrystalCommon.MainContext())
{
var q = (from c in db.tblSpecifications where c.id == ID select c).SingleOrDefault();
if (q != null)
loadByRec(q);
}
}

public Spec(CrystalCommon.tblSpecification Rec)
{
loadByRec(Rec);
}

public void loadByRec(CrystalCommon.tblSpecification Rec)
{
this.ID = Rec.id;
this.Name = Rec.Title;
this.Width = Convert.ToInt32(Rec.FinishedSizeW.Value);
this.Height = Convert.ToInt32(Rec.FinishedSizeL.Value);
this.UOM = Rec.FlatSizeUOM;
this.Pagination = Rec.TxtPagination.Value;
this.ColoursFront = Convert.ToInt32(Rec.TxtColsF.Value);
this.ColoursBack = Convert.ToInt32(Rec.TxtColsB.Value);
this.Material = Rec.TxtMaterial;
this.GSM = Rec.TxtGSM.Value;
this.GSMUOM = Rec.txtGsmUnit;
this.Seal = Rec.TxtSeal.Value == 1;
}

public string displayDimensions()
{
return Width + " x " + Height + " " + UOM;
}
}
}

然后我尝试修改 Name getter 和 setter:

namespace Lite
{
public class Spec
{
public int ID { get; set; }

// User friendly name if available otherwise fall back on spec name
public string Name { get {
if (null != FriendlyName)
return FriendlyName;
else
return Name;
}
set
{
Name = value;
}
}
public string FriendlyName { get; set; }
public int CategoryID { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public string UOM { get; set; }
public int Pagination { get; set; }
public int ColoursFront { get; set; }
public int ColoursBack { get; set; }
public string Material { get; set; }
public int GSM { get; set; }
public string GSMUOM { get; set; }
public bool Seal { get; set; }

public Spec(int ID)
{
using (CrystalCommon.MainContext db = new CrystalCommon.MainContext())
{
var q = (from c in db.tblSpecifications where c.id == ID select c).SingleOrDefault();
if (q != null)
loadByRec(q);
}
}

public Spec(CrystalCommon.tblSpecification Rec)
{
loadByRec(Rec);
}

public void loadByRec(CrystalCommon.tblSpecification Rec)
{
this.ID = Rec.id;
this.Name = Rec.Title;
this.Width = Convert.ToInt32(Rec.FinishedSizeW.Value);
this.Height = Convert.ToInt32(Rec.FinishedSizeL.Value);
this.UOM = Rec.FlatSizeUOM;
this.Pagination = Rec.TxtPagination.Value;
this.ColoursFront = Convert.ToInt32(Rec.TxtColsF.Value);
this.ColoursBack = Convert.ToInt32(Rec.TxtColsB.Value);
this.Material = Rec.TxtMaterial;
this.GSM = Rec.TxtGSM.Value;
this.GSMUOM = Rec.txtGsmUnit;
this.Seal = Rec.TxtSeal.Value == 1;
}

public string displayDimensions()
{
return Width + " x " + Height + " " + UOM;
}
}
}

在我的电脑上编译正常,但服务器在运行时似乎崩溃了。 (第一个版本工作正常)。我的同事在他的机器上编译了它,它显然抛出了一个“堆栈溢出错误”,但他现在不在身边让我得到这方面的细节。

我在这里正确地应用了 getter 吗?

最佳答案

这是一个无限循环:

public string Name { get {
...
set
{
Name = value;
}
}

setter会反复调用自己,直到得到Stack overflow异常。

通常你有一个支持变量,所以它最终是这样的

private string name;
public string Name {
get {
if (null != FriendlyName)
return FriendlyName;
else
return name;
}
set {
name = value;
}
}

关于c# - 带有 getter 和 setter 的 Stackoverflow 错误 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7092589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com