c# - 格式字符串包含 "{"时出现 String.Format 异常

标签 c# .net string.format

我正在使用 VSTS 2008 + C# + .Net 2.0。执行以下语句时,String.Format 语句抛出 FormatException,有什么问题吗?

这是获取我正在使用的 template.html 的位置。我想在 template.html 中格式化这部分 m={0}。

    string template = String.Empty;
    using (StreamReader textFile = new StreamReader("template.html"))
    {
        template = textFile.ReadToEnd();
        String.Format(template, "video.wmv");
    }

http://www.mediafire.com/download.php?u4myvhbmmzg

编辑 1:

这是我的 template.html 的内容,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<!-- saved from url=(0014)about:internet -->
<head>
    <title>Silverlight Project Test Page </title>

    <style type="text/css">
    html, body {
        height: 100%;
        overflow: auto;
    }
    body {
        padding: 0;
        margin: 0;
    }
    #silverlightControlHost {
        height: 100%;
    }
    </style>

    <script type="text/javascript">
        function onSilverlightError(sender, args) {

            var appSource = "";
            if (sender != null && sender != 0) {
                appSource = sender.getHost().Source;
            } 
            var errorType = args.ErrorType;
            var iErrorCode = args.ErrorCode;

            var errMsg = "Unhandled Error in Silverlight 2 Application " +  appSource + "\n" ;

            errMsg += "Code: "+ iErrorCode + "    \n";
            errMsg += "Category: " + errorType + "       \n";
            errMsg += "Message: " + args.ErrorMessage + "     \n";

            if (errorType == "ParserError")
            {
                errMsg += "File: " + args.xamlFile + "     \n";
                errMsg += "Line: " + args.lineNumber + "     \n";
                errMsg += "Position: " + args.charPosition + "     \n";
            }
            else if (errorType == "RuntimeError")
            {           
                if (args.lineNumber != 0)
                {
                    errMsg += "Line: " + args.lineNumber + "     \n";
                    errMsg += "Position: " +  args.charPosition + "     \n";
                }
                errMsg += "MethodName: " + args.methodName + "     \n";
            }

            throw new Error(errMsg);
        }
    </script>
</head>

<body>
    <!-- Runtime errors from Silverlight will be displayed here.
    This will contain debugging information and should be removed or hidden when debugging is completed -->
    <div id='errorLocation' style="font-size: small;color: Gray;"></div>

    <div id="silverlightControlHost">
        <object data="data:application/x-silverlight," type="application/x-silverlight-2" width="500" height="240">
            <param name="source" value="ClientBin/VideoPlayer.xap"/>
            <param name="onerror" value="onSilverlightError" />
            <param name="background" value="white" />
            <param name="initParams" value="cc=true,markers=true,m={0}" />
            <a href="http://go.microsoft.com/fwlink/?LinkID=115261" style="text-decoration: none;">
                <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
            </a>
        </object>
        <iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe>
    </div>
</body>
</html>

在此先感谢, 乔治

最佳答案

据推测,html 包含 javascript 或其他大括号来源({}),它们都需要加倍(到 {{}}) 可与 string.Format 一起使用。我预计可能会有一个不同的(更明显的)标记,即 %%FILENAME%%。然后使用正则表达式或 string.Replace

如果你只有一个标签,string.Replace 就可以了;如果你有很多,正则表达式和 MatchEvaluator 的技巧可能会有所帮助 - like so但具有不同的正则表达式模式。


添加示例 html 后更新:我肯定会使用不同的 token ;在最基本的层面上:

<param name="initParams" value="cc=true,markers=true,m=%%FILENAME%%" />

template = template.Replace("%%FILENAME%%", "video.wmv");

关于c# - 格式字符串包含 "{"时出现 String.Format 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1118529/

相关文章:

c# - .NET Core React 项目中的 MVC 路由没有选择我的 Controller

c# - 为并发锁定 HashSet

c# - xml序列化同时指定xmlelement和xmlattribute

.net - asp.net网站中的CSS文件

.net - 向服务器发送数据时查询字符串和 cookie 的替代方法?

c# - 二维物理引擎

python - 是否有更 Pythonic 的方法来使用 string.format 将字符串填充为可变长度?

python - 在 Python 中使用 format() 方法打印 boolean 值 True/False

带有 printf 的 Java StringBuilder。等效的 String.format

c# - .NET FileSystemWatcher 在移动文件时进入无限循环