Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 函数正在传递变量的先前值,而不是Unity3D中的当前值_C#_Function_Unity3d - Fatal编程技术网

C# 函数正在传递变量的先前值,而不是Unity3D中的当前值

C# 函数正在传递变量的先前值,而不是Unity3D中的当前值,c#,function,unity3d,C#,Function,Unity3d,我目前正在开发一个应用程序,用户可以查看所有产品,可以查看单个产品,还可以下载特定产品 这是我的代码: IEnumerator ButtonClicked(int num, string name, string url, string color, string size, string price, string description) { prodName.text = name.ToString (); prodColor.text = color.ToString (

我目前正在开发一个应用程序,用户可以查看所有产品,可以查看单个产品,还可以下载特定产品

这是我的代码:

IEnumerator ButtonClicked(int num, string name, string url, string color, string size, string price, string description)
{
    prodName.text = name.ToString ();
    prodColor.text = color.ToString ();
    prodSize.text = size.ToString ();
    prodPrice.text = price.ToString ();
    prodDesc.text = description.ToString ();

    string Url = url; 
    WWW www = new WWW (Url);
    yield return www;
    Texture2D texture = www.texture;

    Image img = prodImg.GetComponent<Image> ();
    img.sprite = Sprite.Create (texture, new Rect (0, 0, texture.width, texture.height), Vector2.zero);

    string name2 = name.ToString ();
    Debug.Log (name2.ToString ());
    downloadButton.onClick.AddListener (() => StartCoroutine (onDownloadClick (name2.ToString ())));

}


IEnumerator onDownloadClick(string name) {

    using (IDbConnection dbConnection = new SqliteConnection (conn)) {
        dbConnection.Open ();
        using (IDbCommand dbCmd = dbConnection.CreateCommand ()) {
            string sqlQuery = String.Format ("INSERT INTO PRODUCTS(Name) VALUES(\"{0}\")", name); 
            dbCmd.CommandText = sqlQuery;

            dbCmd.ExecuteScalar ();
            dbConnection.Close ();
        }


    }
    yield return new WaitForSeconds (.1f);
    Debug.Log (name.ToString ());

}
IEnumerator按钮勾选(int num、字符串名称、字符串url、字符串颜色、字符串大小、字符串价格、字符串描述)
{
prodName.text=name.ToString();
prodColor.text=color.ToString();
prodSize.text=size.ToString();
prodPrice.text=price.ToString();
prodDesc.text=description.ToString();
字符串Url=Url;
WWW=新的WWW(Url);
收益率;
纹理2D纹理=www.texture;
Image img=prodImg.GetComponent();
img.sprite=sprite.Create(纹理,新矩形(0,0,texture.width,texture.height),Vector2.0);
string name2=name.ToString();
Log(name2.ToString());
downloadButton.onClick.AddListener(()=>Start例程(onDownloadClick(name2.ToString()));
}
IEnumerator onDownloadClick(字符串名称){
使用(IDbConnection dbConnection=newSQLiteConnection(conn)){
dbConnection.Open();
使用(IDbCommand dbCmd=dbConnection.CreateCommand()){
string sqlQuery=string.Format(“插入到产品(名称)值(\“{0}\”),名称);
dbCmd.CommandText=sqlQuery;
dbCmd.ExecuteScalar();
dbConnection.Close();
}
}
返回新的WaitForSeconds(.1f);
Log(name.ToString());
}

在ButtonClick函数上,它只返回一个值,但当onDownloadClick函数显示当前值和所有以前的值时。有什么问题吗?谢谢

按钮。onClick
是一个
按钮lickedevent
,它将保存“侦听器”,然后在任何时候(即,当单击所属的
UnityEngine.UI.按钮时)调用它们。如果你从不退订,“听众”的名单会越来越多;您只能通过
AddListener
添加到列表中:

downloadButton.onClick.AddListener (() => StartCoroutine (onDownloadClick (name2.ToString ())));
在添加新侦听器之前,请尝试清除
按钮ClickedEvent
对象,如下所示:

downloadButton.onClick.RemoveAllListeners();
downloadButton.onClick.AddListener (() => StartCoroutine (onDownloadClick (name2.ToString ())));

我不知道你的问题是什么,但我建议你阅读并理解。当我看到你把
string
转换成
string
时,我的眼睛在流血,这完全是不必要的。你在这个小小的
按钮点击的
函数中做了8次。这就是使用
ToString()
函数时发生的情况。不要对
string
类型调用
ToString()
。何时执行按钮单击?每次运行Button时,都会将侦听器单击到OnDownLoad,并使用该名称单击。我猜您应该先单击按钮,然后更改值,然后下载,这将为您提供上次执行ButtonClick的名称作为下载值。因此,要解决此问题,您只需执行addListener一次,然后在下载方法中获取prodName.text。非常感谢@莎拉很乐意帮忙。如果这解决了您的问题,您可以选择它作为答案,这样问题将标记为已解决。