首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >StringAssert.Contains("{",针)抛出System.FormatException:输入字符串格式不正确

StringAssert.Contains("{",针)抛出System.FormatException:输入字符串格式不正确
EN

Stack Overflow用户
提问于 2022-05-09 23:24:51
回答 2查看 192关注 0票数 5

我使用的是C#和.NET Core和Microsoft.VisualStudio.TestTools.UnitTesting

打电话时:

代码语言:javascript
复制
StringAssert.Contains(my_text, my_needle);

使用一些my_text值,例如:

代码语言:javascript
复制
StringAssert.Contains("foo bar baz", "hello");

将显示正确的错误消息:

代码语言:javascript
复制
StringAssert.Contains failed. String 'foo bar baz' does not contain string 'hello'. .
   at ... 

但是,如果my_text有其他值,则会发生以下错误:

代码语言:javascript
复制
Test method MyTest threw exception: 
System.FormatException: Input string was not in a correct format.
    at System.Text.ValueStringBuilder.ThrowFormatError()
   at System.Text.ValueStringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.Format(IFormatProvider provider, String format, Object[] args)
   at ...

为什么会发生这种情况?

更新:我已将此作为错误报告提交。

EN

回答 2

Stack Overflow用户

发布于 2022-05-09 23:53:02

一个快速的解决方案是使用

代码语言:javascript
复制
StringAssert.Contains(my_text, my_needle, "", null);

这是正确的!

说明:使用我找到的调试器

代码语言:javascript
复制
public static void Contains(string value, string substring)

呼叫

代码语言:javascript
复制
public static void Contains(
      string value,
      string substring,
      string message,
      StringComparison comparisonType) {
// Calling:
        StringAssert.Contains(value, substring, message, comparisonType, StringAssert.Empty);

哪个呼叫

代码语言:javascript
复制
public static void Contains(
      string value,
      string substring,
      string message,
      StringComparison comparisonType,
      params object[] parameters)
    {
... // calling:
        Assert.HandleFail("StringAssert.Contains", finalMessage, parameters);

HandleFail内部,parameters的值是object[],并且:

代码语言:javascript
复制
parameters != null ? string.Format(...) : Assert.ReplaceNulls(message)

触发格式调用(因为parameters不是null.)。

这好像是个虫子。

复制:

代码语言:javascript
复制
StringAssert.Contains("{", "x");

虽然这是可行的:

代码语言:javascript
复制
StringAssert.Contains("{", "x", "", null);
票数 5
EN

Stack Overflow用户

发布于 2022-05-09 23:40:21

一般来说,这种错误几乎总是由于插值字符串。您得到错误的原因(可能)是因为您的字符串中有{}。这就是为什么您的错误是这样的:

在System.String.Format(IFormatProvider provider,String格式,Object[] args)

因为在链的某个地方,您将有类似于string.Format()的东西,而在其中包含{}的字符串正在破坏它。为了解决这个问题,您可以通过将所有{}替换为双{{}来逃避它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72179163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档