0

我有一个这样的设置类:

public class Settings
{
    string resourcePath;
    public string ResourcePath {
        get {
            return resourcePath + "/";
        }
        set {
            resourcePath = value;
        }
    }

    string texturePath;
    public string TexturePath {
        get {
            string a = resourcePath + "/"; // This is just some debug stuff I did trying to find out wtf is going on
            string b = texturePath + "/";
            return a + b; // Breakpointing here shows that it is "Content/Textures/"
        }
        set {
            texturePath = value;
        }
    }

    public Settings ()
    {
        resourcePath = "Content";
        texturePath = "Textures";
    }

    public static Settings CurrentSettings = new Settings();
}

然后我尝试从中获取 TexturePath,如下所示:

string path = Settings.CurrentSettings.TexturePath + file;

该属性返回的字符串是"Content//Content/Textures//"

我在这里想念什么?为什么这样做?据我所知,它应该返回Content/Textures/

4

3 回答 3

3

使用Path.Combine处理路径。

string path = Path.Combine(Settings.CurrentSettings.TexturePath,file);

并且无需在您的属性中添加“/”。

public string ResourcePath {
    get {
        return resourcePath;
    }
    set {
        resourcePath = value;
    }
}
于 2013-09-14T16:11:55.140 回答
2

您可能没有平衡/getter 和 setter 之间的关系。你可能会得到一些属性,然后用它设置另一个 - 导致太多/的 's。

于 2013-09-14T16:08:29.963 回答
1

您尚未显示产生您报告的结果的代码,但以下代码非常可疑:

string resourcePath;
public string ResourcePath {
    get {
        return resourcePath + "/";
    }
    set {
        resourcePath = value;
    }
}

它总是在 getter 上附加一个正斜杠,但从不在 setter 中删除它。所以下面的代码:

x.ResourcePath = "abc";
x.ResourcePath = x.ResourcePath + "/def";
x.ResourcePath = x.ResourcePath + "/ghi";

将设置ResourcePath为“abc//def//ghi”。

我怀疑你遇到了类似的事情。

于 2013-09-14T16:12:11.570 回答