【问题标题】:C# error with converting string to int in unity3d在 unity3d 中将字符串转换为 int 时出现 C# 错误
【发布时间】:2015-09-25 15:12:26
【问题描述】:

我在使用 C# 的 Unity 中遇到问题,我正在尝试创建一个包含我需要的所有信息的列表或数组。

0000、0001,0002 等

我想将其放入列表/数组中,并使用此信息在字符选择屏幕上实例化模型。然而,这是代码中一切都开始变得混乱的部分。

我只是想读出数字并将它们添加到列表中。

    void Start () {
    gestureListener = this.GetComponent<GestureListener>();
    for (int i = 0; i < numberOfModels; i++) {
        string b = i.ToString("0000");
        List<string> mylist = new List<string>(new string[b]);
        Debug.Log (mylist);
        break;
    }
}

我收到此错误:

error CS0029: Cannot implicitly convert type `string' to `int'

错误发生在第 5 行,但对我来说,这似乎是不可替代的行...

变量 B 是 string,所以我不知道为什么列表将其视为 int

如果你能帮上忙,请告诉我,非常感谢!

【问题讨论】:

  • 问题出在这部分:new string[b]
  • @Dmitry b 是一个字符串,它也不起作用。你的意思是i
  • 因为如果我用 b 替换新字符串 [b] 它会给我这个错误:错误 CS1502: `System.Collections.Generic.List.List(System 的最佳重载方法匹配.Collections.Generic.IEnumerable)' 有一些无效参数

标签: c# arrays string list unity3d


【解决方案1】:

如果您尝试实例化一个列表,然后将元素添加到该列表中,那么您就错了。每次迭代时,您当前都只使用一个元素来实例化一个新列表。换句话说,您并没有使用列表,您只是在每次循环时创建一个新列表。

在循环外创建字符串列表,然后从循环内添加到它。

你应该有这样的东西来填充列表。

void Start() 
{
    List<string> mylist = new List<string>();
    gestureListener = this.GetComponent<GestureListener>();
    for (int i = 0; i < numberOfModels; i++) {
        string b = i.ToString("0000");
        myList.Add(b);
        Debug.Log (mylist);
        break;
    }
}

话虽如此,在您的for-loop 末尾,您的myList 将有一个models 的集合。然后,您可以迭代该集合以查看您推送的所有元素。

foreach(var item in mylist)
{
   //Do whatever with each Item.
}

如果您需要更多示例,请查看DotNetPerls List Examples 这个video example 考虑到了 Unity。

【讨论】:

  • 我正在使用 kinect,我正在尝试实现一个对滑动动作做出反应的角色选择,每次我运行 forloop 时它都必须实例化下一个数字
  • 我的代码与 Ron Beyer 相同,如果它对您没有帮助,是什么让您接受这个答案?您的数字集合将在进入循环之前被实例化,在循环内您只需向集合添加一个数字然后跳出循环,该逻辑没有任何意义。您究竟想在这里做什么,尝试更好地分解它,也许我们可以更好地帮助您。
  • 我几乎完成了,但简而言之;我使用了你的答案,因为在我提出我希望代码循环的方式之后,我得出结论你的答案是最好的,因此我我接受你的这个案子。我编写了我的代码,以便这个 forloop 获取我的层次结构中的所有模型数量并将它们放在一个列表中。然后我使用第二个变量来计算滑动次数,并使用这个数字从 forloop 中挑选出数字,这使我每次都能获得正确的模型,其中有一个自动部件来检查新模型,这样我就不必每次手动添加所有内容
  • 非常感谢您的回答,这对我帮助很大!
  • @niels 很高兴你成功了,也很乐意提供帮助。保重。
【解决方案2】:
void Start () {
    gestureListener = this.GetComponent<GestureListener>();
    List<string> myList = new List<string>();
    for (int i = 0; i < numberOfModels; i++) {
        string b = i.ToString("0000");
        myList.Add(b);
        Debug.Log (mylist);
        break;
    }
    //myList is populated with all the numberOfModels here.
}

不要在循环内创建新列表。您现在这样做的方式是,您正在尝试创建一个新列表(无论如何您都将其丢弃),该列表具有逐渐变大的空字符串数组。例如,numberOfModels 为 100,您将拥有 100!列表中的空字符串元素(如果您保存了它)。

只需在 for 循环之外创建一个列表,并将字符串 b 添加到循环内的列表中。

【讨论】:

  • 感谢您的回答,因为它让我看到了我真正需要的东西。
猜你喜欢
  • 1970-01-01
  • 2011-09-15
  • 2016-10-15
  • 2018-01-13
  • 2016-10-27
  • 2017-07-16
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
相关资源
最近更新 更多