重载的C#方法会在互相调用时导致Unity崩溃

时间:2015-03-02 19:12:52

标签: c# unity3d

在尝试运行此代码时,我设法崩溃团结,而不仅仅是我的游戏,而是整个编辑器。

public object get(string path, object default_value) {
    string[] parts = path.Split ('.');
    Dictionary<string, object> dict = json_parsed;
    int i = 0;
    for (; i < parts.Length - 1; i++) {
        dict = dict[parts[i]] as Dictionary<string, object>;
    }
    try {
        return dict[parts[i]];
    } catch (KeyNotFoundException) {
        return default_value;
    }
}
public int get(string path, int default_value) {
    return Convert.ToInt32(get(path, default_value));
}

get(path, default_value)的第二个版本中运行get()代码时发生崩溃,但如果我将第二个版本命名为getInt(),我可以解决此问题。

我是C#的新手,因为我甚至使用了一种超载的语言已经好几年了,所以我在这里错误的做法就是躲避我。

1 个答案:

答案 0 :(得分:4)

public int get(string path, int default_value) {
    return Convert.ToInt32(get(path, default_value));
}

这个get无限调用自身会导致堆栈溢出。

将通话更改为:

public int get(string path, int default_value) {
    return Convert.ToInt32(get(path, (object)default_value));
}