gpt4 book ai didi

c# - 对象的属性何时可用?

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:27 25 4
gpt4 key购买 nike

前言:这是一个很长的问题,如果您不想阅读和理解我为什么要问它,那么请不要评论“为什么不简单地测试代码?”

我有一个看起来有点像这样的对象模型:

public class MyObjectModel
{
public byte TypeOfNestedObject { get; set; }
public string NestedObjectInJson { get; set; }

public NestedObjectModel1 { get; set; }
public NestedObjectModel2 { get; set; }
public NestedObjectModel3 { get; set; }

public MyObjectModel()
{
NestedObjectModel1 = null;
NestedObjectModel2 = null;
NestedObjectModel3 = null;
}

public void DeserializeJsonString()
{
if (TypeOfNestedObject == 1) {

NestedObjectModel1 = "deserialize NestedObjectInJson
into NestedObjectModel1";
}

if (TypeOfNestedObject == 2) {

NestedObjectModel2 = "deserialize NestedObjectInJson
into NestedObjectModel2";
}

if (TypeOfNestedObject == 3) { NestedObjectModel3 ... }
}
}

基本上,该对象由三个嵌套对象( NestedObjectModel1NestedObjectModel2NestedObjectModel3 )组成。但是,在任何给定时间实际上只使用其中一个。在数据库中,我存储了用于重新创建该对象的字段,其中一个数据库字段是一个 json 字符串,其中包含特定实例的三个嵌套对象之一。

我的查询看起来有点像这样:

var TheObjectModel = from t in MyDC.Table
.....
select new MyObjectModel()
{
TypeOfNestedObject = t.TypeOfNestedObject,

NestedObjectInJson = t.NestedObjectInJson
};

我使用属性 TypeOfNestedObject知道哪个嵌套对象是 MyObjectModel 的特定实例有。 目前,在查询执行后,我运行一个读取 TypeOfNestedObject 的方法并反序列化字符串 NestedObjectInJson到适当的类型并将反序列化的对象添加为相应的嵌套对象。

现在我想向 NestedObjectInJson 添加自定义 setter 因此,当查询运行时设置此属性时,对象会自动将字符串反序列化为适当的类型。但是,要使其起作用,该对象还必须具有属性 TypeOfNestedObject正确设置。我想这样写 setter:

public NestedObjectInJson
{
set {

if (this.TypeOfNestedObject == 1) {

NestedObjectModel1 = "deserialize NestedObjectInJson
into NestedObjectModel1 ";
}
}
}

如果我这样编写 setter,TypeOfNestedObject 属性是否需要在 setter 运行时可用。如果您注意到,在查询中,我加载了 TypeOfNestedObject在我加载之前 NestedObjectInJson .

所以问题是:如果我决定删除对 DeserializeJsonString 的调用并创建此自定义 setter ,属性 TypeOfNestedObject 是否可用,因为在查询中它设置在 NestedObjectInJson 之前或者是查询的编写顺序使属性可用 TypeOfNestedObject不可预测?

最佳答案

这行得通,顺序是可预测的。

但是,我建议不要这样做。干净的方法是提供一个构造函数,该构造函数采用类型和 JSON 并执行反序列化。
使用这种方法,您可以避免 temporal coupling你目前有。

关于c# - 对象的属性何时可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14835265/

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