【问题标题】:String.Replace() doesn't work with "|"String.Replace() 不适用于“|”
【发布时间】:2016-10-05 09:07:33
【问题描述】:

在我当前的项目中,我想动态设置一个 connectionString。 我从默认设置中获取带有占位符 ("|DataDirectory|") 的字符串,然后我想用实际路径替换该占位符。

我的代码:

connectionString = Properties.Settings.Default.KDatabaseConnectionString;
connectionString.Replace(@"|DataDirectory|", Application.StartupPath);

我无法让它工作,它什么也没做。当我在 dubug 模式下运行代码时,我可以看到连接字符串包含“|DataDirectory|”但它不会替换它。

我在这里看到很多关于string.replace() 不起作用的问题,但没有一个是关于我的问题的。那么有人有想法吗?

编辑:好的,谢谢。如此糟糕的新手错误。

【问题讨论】:

  • 好吧,你正在替换字符串,但没有分配它,替换对不可变字符串本身不起作用,你需要将它分配回connectionString

标签: c# visual-studio replace filepath


【解决方案1】:

您没有将结果放回connectionString

试试

connectionString = Properties.Settings.Default.KDatabaseConnectionString;
connectionString = connectionString.Replace(@"|DataDirectory|", Application.StartupPath);

【讨论】:

  • 谢谢,半年没写代码了,现在开始犯这么严重的错误了……
  • 不介意。我认为我们大多数人在他们的职业生涯中至少经历过甚至不止一次犯过类似的错误;)
【解决方案2】:

您没有使用Pure Method 的返回值。

换句话说,.Replace() 方法实际上并没有对变量本身做任何事情,只是返回新值供您使用。

您需要的语句是:

connectionString = connectionString.Replace(@"|DataDirectory|", Application.StartupPath);

否则,您将执行以下操作:

public string Replace(string str)
{
        Do something...
        return str;
}

其中 str 由 Value 传递,而不是由 Reference 传递,然后不使用返回值。

【讨论】:

    【解决方案3】:
    connectionString = connectionString.Replace(@"|DataDirectory|", Application.StartupPath);
    

    【讨论】:

    • 请提供更多信息为什么这个答案可以解决问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 2011-11-30
    • 1970-01-01
    • 2014-04-19
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多