代码之家  ›  专栏  ›  技术社区  ›  zaen

将值传递到异常字符串消息中

  •  1
  • zaen  · 技术社区  · 2 年前

    为什么不能使用以下代码将变量值添加到字符串中:

    throw new ArgumentOutOfRangeException("Any Opening Type besides 'None', should have a minimum width value of 50. Your inputed value = {0}",value);
    

    我得到的错误是:“CS1503:参数2:无法从‘int’转换为‘System.Exception?’”

    但当我使用此代码时,效果很好:

    throw new ArgumentOutOfRangeException($"Any Opening Type besides 'None', should have a minimum width value of 50. Your inputed value = {value}");
    

    有人能帮我理解为什么吗?据我所知,这两种方法的结果应该是一样的。我不明白为什么它会被转换,如果我使用控制台,我不应该得到同样的错误吗。WriteLine方法?这有什么特别之处?

    2 回复  |  直到 2 年前
        1
  •  3
  •   StriplingWarrior    2 年前

    第一种语法仅适用于使用格式字符串的方法。一些方法,比如 Console.WriteLine an overload 它将格式字符串作为第一个参数,将任意数量的对象作为后续参数数组,因此您可能习惯于使用字符串插值语法( $"..." ).

    大多数异常构造函数都不遵循这种模式,因此您必须构建自己的字符串作为消息参数传入。正如您所发现的,字符串插值语法将自动为您做到这一点。或者你可以打电话 string.Format 明确地:

    throw new ArgumentOutOfRangeException(
        string.Format(
            "Any Opening Type besides 'None', should have a minimum width value of 50. Your inputed value = {0}",
            value));
    
        2
  •  2
  •   Harry Ramsey    2 年前

    您应该查看 ArgumentOutOfRangeException . 您提供的参数与任何构造函数参数类型都不匹配,因此它会引发异常。

    相反,您应该使用 String.Format() 例如:

    throw new ArgumentOutOfRangeException(String.Format("Any Opening Type besides 'None', should have a minimum width value of 50. Your inputed value = {0}",value));