C# 与C脚本的统一:类数据类型使用数据从类传递值

C# 与C脚本的统一:类数据类型使用数据从类传递值,c#,class,variables,unity3d,unityscript,C#,Class,Variables,Unity3d,Unityscript,我遇到了一个简单而奇怪的问题,将值传递给数据类型类变量 代码如下所示: void AddItem(int ID) { for (int i = 0; i < database.items.Count; i++) { if(database.items[i].itemID == ID) { itemxs = new item (database.items [i].itemName,

我遇到了一个简单而奇怪的问题,将值传递给数据类型类变量

代码如下所示:

void AddItem(int ID) {
    for (int i = 0; i < database.items.Count; i++) {
        if(database.items[i].itemID == ID) {
            itemxs = new item (database.items [i].itemName,
                              database.items [i].itemID,
                              database.items [i].itemDesc,
                              database.items [i].harvest,
                              database.items [i].itemTime,
                              database.items [i].stdprice,
                              database.items [i].hightprice,
                              database.items [i].itemStock,
                              database.items [i].Lvlunlock,
                              database.items [i].rawTree,
                              database.items [i].itemType,
                              database.items [i].itemProd,
                              database.items [i].itemIcon);

            Debug.Log ("Item Icon 1 : " + database.items[i].itemIcon); // This appear "Corps/Lemon"
            Debug.Log ("Item Icon 2 : " + itemxs.itemIcon); // This appear "Corps/Lemon/Lemon" **even though I just passing value from code itemxs = new item (database.items [i].itemName,...etc)** it is wierd

            CheckInventoryExist(itemxs);
            break;
        }
    }
}
然后是itemDatabase.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class itemDatabase : MonoBehaviour {
    public List<item> items = new List<item>();

    // Use this for initialization
    void Start () {
        // Add Data To Item List With Class Item

        // ------------------------------- Item Corps (Raw - Big Tree) ------------------------------- //
        items.Add (new item ("Lemon", 1, "Honey Lemon", 9, 1020, 75, 158, 0, 1, item.RawTree.BigTree, item.ItemType.Raw, item.ItemProd.Corps, "Corps"));

    }

    // Update is called once per frame
    void Update () {

    }
}
项目名称包含:柠檬

项目图标包含:军团/+项目名称;您可以在itemDatabase.cs文件中检查它,构造函数位于item.cs

因此结果itemIcon必须是:Corps/Lemon但是

为什么itemxs.itemIcon得到了双itemName?例如:Corps/Lemon/Lemon。

在项目构造函数中,您正在执行以下操作:

this.baseName = folder + "/";
itemIcon = this.baseName + itemName;
其中folder==Corps和this.baseName==Corps/Lemon/和itemName==Lemon,这样您就得到了应该得到的内容。

在构造函数中:

 this.baseName = folder + "/";  // if folder = "Corps/Lemon" from database.items[i].itemIcon
 itemIcon = this.baseName + itemName; // it will update itemIcon to "Corps/Lemon" + "/" + "Lemon"
你现在明白了吗

您可能希望直接分配itemIcon值,而不是执行所有这些操作

在构造函数中执行此操作:

itemIcon = folder;

干杯

你能告诉我这个神奇的构造函数代码中发生了什么吗?我已经用类更新了代码。。您能检查一下吗?作为旁注:从您的item类中删除Start、Wake和Update。它不是从单一行为中继承的,因此不能拥有它们,或者至少它们没有这样做。此外,类名应始终以大写字母开头。在itemDatabase中:items。添加新的item Lemon、1、Honey Lemon、9、1020、75、158、0、1、item.RawTree.BigTree、item.ItemType.Raw、item.ItemProd.Corps、Corps。。。。。。。参数的末尾我只有输入。因此,this.baseName=folder=Corps/不带lemon。我尝试删除itemName;但是itemIcon只包含Corps/。问题是什么?在itemDatabase中:items。添加新的item Lemon,1,Honey Lemon,9,1020,75,158,0,1,item.RawTree.BigTree,item.ItemType.Raw,item.ItemProd.Corps,Corps。。。。。。。参数的末尾我只有输入。因此,this.baseName=folder=Corps/不带lemon。我尝试删除itemName;但是itemIcon只包含Corps/。问题出在哪里?源于原始代码:database.items[i].itemcon//This Contain Corps/Lemon;您正在传递的是itemIcon,而不是字符串Corps。请查看上面的这一行:Debug.Log database.items[i].itemIcon;//调试时,此文件仍包含Corps/Lemon Debug.Log itemxs.itemcon;//调试时,此文件将变为contain Corps/Lemon/Lemon。如果您将itemIcon作为文件夹名传递,这正是您应该期望的。这是准确的行为,因为代码本身没有大脑。这肯定是一个逻辑错误。@DennisLiu如果你不能理解基本的编程逻辑,你不需要否决我的答案。阅读他人代码和回答问题需要时间,因此至少感谢我的帮助:
 this.baseName = folder + "/";  // if folder = "Corps/Lemon" from database.items[i].itemIcon
 itemIcon = this.baseName + itemName; // it will update itemIcon to "Corps/Lemon" + "/" + "Lemon"
itemIcon = folder;