string.format中的Tenant运算符

时间:2019-05-22 13:56:10

标签: c# string.format

在c#中,string.format是否总是计算参数? 下面的代码抛出索引超出范围的异常-这是否意味着args是在三元运算的结果之前计算的?

using System;
public class Program
{
    public static void Main()
    {
        int[] a = {0, 1};
        int i = -1;
        var errstr = string.Format(i < 0 ? "Wrong Index" : "value - {0}", a[i]);
    }
}

2 个答案:

答案 0 :(得分:4)

尝试

var errstr = i < 0 ? "Wrong Index" : string.Format("value - {0}", a[i]);
  

下面的代码将索引抛出异常范围外-这是否意味着args是在三元运算的结果之前计算的?

否,将三元运算符应用于格式字符串,而不是参数。您的arg是次计算的。在i<0情况下变为

var errstr = string.Format("Wrong Index", a[-1]);

即使在格式字符串中未引用,也会引发评估a[-1]的异常。

答案 1 :(得分:0)

当您执行此操作a[i]时,结果将为a[-1],因此该异常是正确的。

  var errstr = string.Format(i < 0 ? "Wrong Index" : "value - {0}", a[i]);