【发布时间】:2019-10-17 02:44:01
【问题描述】:
我想我有一些问题尝试解释我的意思,所以我要解释我做什么以及我的代码从一开始就变成了什么。
我有这段代码可以将我的数据保存到 json,它工作正常,完美打印 json
脚本:GiftValue
[SerializeField]
public class Gift
{
public int GValue
public string GName
public int GAmount
public float GWeight
}
脚本:EditAddGift
[SerializeField]
public List<Gifts> _Gift = new List<Gifts>();
///those code above is what i missing before.
Gifts NewGift = new Gifts
{
GValue = DropDownValueGift,
GName = ifGiftDetailName.text,,
GAmount = iAmount,
GWeight = fWeight,
};
_Gift.Add(NewGift);
SaveToJson(_Gift, DATABASE_NAME);
在我意识到我的班级需要拆分为 GiftDetail 和 Gift 之前,这是我的代码。 之后我意识到我需要将“礼物”分成两部分,“礼物”和“礼物细节”。 Soo 我在谷歌上发现了嵌套类,一段时间后我的 Script GiftValue 变成了这个
[System.Serializable]
public class GiftDetail
{
public int GDetailValue
public string GDetailName
public double GDetailWeight
public int GDetailAmount
}
[System.Serializable]
public class Gift
{
public int GValue
public string GName
public List<GiftDetail> GiftDetail
}
更改后我无法编写代码,因为我只知道如何像这样调用普通类:
礼物 NewGift= 新礼物
{ ...... }
这就是我尝试做的事情
GiftDetail NewGiftDetail = new GiftDetail
{
GDetailValue = DropDownValueGiftDetail,
GDetailAmount = iAmount,
GDetailName = ifGiftDetailName.text,
GDetailWeight = Fweight,
};
Gifts NewGift = new Gifts
{
GValue = DropDownValueGift,
GName = txtDropDownGift,
//What i want to know is how to change NewGiftDetail
//or change class Gift or class GiftDetail or....
// so i can put GiftDetail in here
//GiftDetail = NewGiftDetail,// let just delete this,
// because i don't know how to call this
};
所以最后我的 json 文件看起来像这样
[
{
"GValue": 1,
"GName": "Gift 3",
"GiftDetail":
[
{
"GDetailValue": 3,
"GDetailName": "2",
"GDetailWeight": 3.0,
"GDetailAmount": 4
},
{
"GDetailValue": 3,
"GDetailName": "2",
"GDetailWeight": 3.0,
"GDetailAmount": 4
}
],
},
]
我之前尝试过某种方式,例如将 Gift 更改为 public class Gift<T> blah blah .. 但我认为我应该在它垮台之前展示我的代码,以帮助你们更清楚我想要实现的目标
在更改为 Gift 和 GiftDetail 之前我用来删除的代码
if (_Gift.Exists(x => x.GValue== DropDownValuePhanQua ))
{
int i = 0;
while (i <_Gift.Count && _Gift[i].GValue != DropDownValuePhanQua)
i++;
_Gift.RemoveAt(i);
}
_Gift.Add(NewGift);
SaveToJson(_Gift, DATABASE_NAME);
我改成这个
if (_Gift.Exists(x => x.GValue== DropDownValuePhanQua ))
///still don't know how to get GDetailValue , it only let me access to x.GiftDetail
{
GiftDetail NewGiftDetail3 = new GiftDetail
{
GDetailValue = DropDownValuePhanQua,
GDetailAmount = iSoLuongPhanQua,
GDetailName = ifTenPhanQua.text,
GDetailWeight = fTileRaPhanQua,
};
int i = 0;
while (i <_Gift.Count && _Gift[i].GValue != DropDownValuePhanQua)
i++;
NewGift.GiftDetails.Add(NewGiftDetail3);
_Gift.RemoveAt(i);
}
_Gift.Add(NewGift);
SaveToJson(_Gift, DATABASE_NAME);
如果我使用关于它的代码将返回 json 但它会继续替换第二个 GiftDetail
[ {
"GValue": 1,
"GName": "Phần Quà 1",
"GiftDetails": [
{
"GDetailValue": 5,
"GDetailName": "3",
"GDetailWeight": 2.0,
"GDetailAmount": 4
},
{
"GDetailValue": 6,
"GDetailName": "Old One",
"GDetailWeight": 33.0,
"GDetailAmount": 3
}
]
}
]
到这里
[
{
"GValue": 1,
"GName": "Phần Quà 1",
"GiftDetails": [
{
"GDetailValue": 5,
"GDetailName": "3",
"GDetailWeight": 2.0,
"GDetailAmount": 4
},
{
"GDetailValue": 3,
"GDetailName": "new Gift",
"GDetailWeight": 33.0,
"GDetailAmount": 3
}
]
}
]
【问题讨论】:
-
你能把一辆车变成多辆车吗?
Gift接受List<GiftDetail>,而您提供的是单个GiftDetail对象。 -
我确实尝试将 GiftDetail NewGiftDetail = new GiftDetail 更改为 List
NewGiftDetail = new List 它解决了该错误,但它告诉我我在 GiftDetail 中没有 GDetailValue -
大概是告诉你
List<GiftDetail>中没有GDetailValue,而不是GiftDetail中没有GDetailValue。请仔细阅读编译器错误。 9/10 他们会告诉你到底出了什么问题。我这么说是因为有人盯着编译器警告看了 5 分钟,却看不出过去出了什么问题。 -
我不好,我刚回来查看,它确实说 List
,我了解错误以及它告诉我要更改的内容,问题是我不知道如何解决它。跨度> -
你最后的作业没有意义。首先,代码编写得好像
Gift是一个泛型类型,但这不是您在此处显示的Gift类。其次,您将NewGiftDetail分配给GiftDetail属性。前者是GiftDetail的单个实例,而后者是List<GiftDetail>。自然,您不能将一个分配给另一个。也许你的意思是GiftDetail = new List<GiftDetail> { NewGiftDetail }?至少,如果您要发布带有问题的代码(并且您应该),那么该代码应该是您正在使用的实际代码。