我从尝试用值替换字符串的一部分得到System.FormatException

时间:2018-07-12 04:31:50

标签: c# .net wpf

我有一个javascript文件,它包含以下js脚本

MATCH (p:person),(d:company)
WHERE p.org_lookup_id=d.org_id
merge (p)-[r:WORKS_FOR]->(d)
RETURN type(r)

我使用以下代码将其读取为字符串:

(function() {
    try {
        var click = new MouseEvent('click', {bubbles: true, cancelable: true, view: window});
        var field = document.querySelector('input[type="email"]');
        setTimeout(function() {
            field.dispatchEvent(click);
            field.focus();
            field.value="{0}";
        }, 500);
        return true;
    } catch(err) {
        return false; 
    }
})();

我收到错误消息:抛出异常:mscorlib.dll中的'System.FormatException'

当我尝试用“我的用户名” 替换 {0} 时。 有人可以帮我吗?

谢谢。

基于PepitoSh方法的答案如下:

var path = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory) + "\\Resources\\script\\myjavascript.js";
var raw = File.ReadAllText(path);
var args = new object[] { "my_username" };
Console.WriteLine(raw, args);

2 个答案:

答案 0 :(得分:3)

您必须转义所有其他{}并仅保留"{0}"来使string.format正常工作。

我还将添加一个具有所有变量属性的js对象,并将其用作js脚本中的参数或全局对象,因此对于多个脚本,我只需要替换一次值即可。

答案 1 :(得分:2)

由于确实需要转义不属于格式的花括号,因此在这种特定情况下,我建议使用另一种方法:

var path = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory) + "\\Resources\\script\\myjavascript.js";
var raw = File.ReadAllText(path);
raw = raw.Replace("{0}", "my_username");
Console.WriteLine(raw);