在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]);
}
}
答案 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]);