VB中Replace(str1, str2, str3)在C#中的等效实现及错误解决
VB的
Replace字符串函数在C#中的等效写法 兄弟,你这明显是搞混了两个完全不同的方法!VB里的Replace()是字符串替换工具,用来替换字符串里的子串;而你在C#里用的File.Replace()是用来操作文件的——它的作用是把一个文件替换成另一个文件,完全不是处理字符串的!
咱们来捋清楚:
- VB代码里的
Replace(pdfTemplate, "bin\Debug\", ""):是把pdfTemplate这个字符串里所有的bin\Debug\子串替换成空字符串 - 你误用的C#
File.Replace(pdfTemplate, "bin\\Debug\\", ""):这个方法需要三个参数,前两个是文件路径,第三个是备份路径,用来替换文件,所以肯定会报错!
正确的C#写法,是直接调用字符串的Replace()实例方法,和VB的逻辑完全对应:
修正后的完整C#代码
pdfTemplate = HostingEnvironment.MapPath("~/Content/PDFs/2017-I9.pdf"); // 用字符串的Replace方法,不是File.Replace! pdfTemplate = pdfTemplate.Replace(@"bin\Debug\", ""); // 或者用转义双斜杠的写法:pdfTemplate = pdfTemplate.Replace("bin\\Debug\\", ""); var fields = new Dictionary<string, string>() { {"textFieldLastNameGlobal", EL.LastName}, {"textFieldMiddleInitialGlobal", EL.MiddleName.Substring(0, 1)}, // 补充:VB的Mid对应C#的Substring {"textFieldFirstNameGlobal", EL.FirstName}, {"textFieldOtherNames", EL.OtherLastName} };
另外顺便提一句,VB里的Mid(Me.tbMiddle.Text, 1, 1)在C#里对应的是Substring(0, 1),不过要注意如果EL.MiddleName是空字符串的话,直接调用Substring会报错,建议加个判断,比如:
{"textFieldMiddleInitialGlobal", !string.IsNullOrEmpty(EL.MiddleName) ? EL.MiddleName.Substring(0, 1) : ""}
内容的提问来源于stack exchange,提问作者Ahmed Ali
相关产品推荐
相关产品推荐

