C中的占位符# 这是我的C#代码,我对编程非常陌生我刚刚 想知道我能给其他数字赋值吗 用{0}、{7}或{1}、{3}代替switch case语句中的{0}、{1} 案例A??有人能解释一下占位符的概念吗
简单地说,您不能为不存在的值提供格式化说明符。例如:C中的占位符# 这是我的C#代码,我对编程非常陌生我刚刚 想知道我能给其他数字赋值吗 用{0}、{7}或{1}、{3}代替switch case语句中的{0}、{1} 案例A??有人能解释一下占位符的概念吗,c#,C#,简单地说,您不能为不存在的值提供格式化说明符。例如: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace switch_calculator { class Program { stati
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace switch_calculator
{
class Program
{
static void Main(string[] args)
{
double num1, num2;
char opt;
Console.WriteLine("Enter num1");
num1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter num2");
num2 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Select the operation you would like to perform" );
Console.WriteLine("Press \n 'A' for Add \n 'S' for subtraction
\n 'D' for Division \n 'M' for multiplicatiion \n 'R' for Remainder");
opt = Convert.ToChar(Console.ReadLine());
switch(opt)
{
case 'A':
Console.WriteLine("your Add result {0} + {1} is {2}", num1, num2, num1+num2);
break;
}
Console.ReadLine();
}
}
}
将抛出FormatException
,因为只提供了一个参数(数组基于0)
让我解释一下这里的一切意味着什么:
Console.WriteLine("your Add result {0} + {1} is {2}", num1, num2, num1+num2);
这是没有值的方法。
如您所见,您给它一个要打印的字符串和一个参数列表
运行此方法时,将使用以下值填充:
Console.WriteLine(string text, params object[] obj);
现在格式化程序所做的是将ToString()
-方法返回的对象的值放置在给定的索引处
让我们假设num1
是4
,num2
是5
text = "your Add result {0} + {1} is {2}";
obj = new object[3];
obj[0] = num1;
obj[1] = num2;
obj[2] = num1+num2;
会像这样被填满
"your Add result {0} + {1} is {2}"
"your Add result {2} + {0} is {1}"
但是如果你把索引改成
"your Add result 4 + 5 is 9"
结果会是这样的
"your Add result {0} + {1} is {2}"
"your Add result {2} + {0} is {1}"
如果您提供数组中不存在的字符串
索引(例如{7}
),应用程序将崩溃,说明请求的索引(在本例中为7
)为null
。这将是一个系统.FormatException
如果您试图在一个大小为
4
元素的数组中获取索引7
的值,则情况相同。不,您不能。语法糖是使用$”您的添加结果{num1}+{num2}是{num1+num2}
。您仍然不能更改占位符的索引。它们总是从0开始。不,占位符需要一个从格式字符串后的第一个参数开始索引的数字,从零开始
所以Console.WriteLine(“你好,{0}!”,“世界”)
将打印“你好,世界!”!“
和控制台。WriteLine(“你好,{1}!”、“忽略”、“世界”)
将打印相同的内容
不能索引到不存在的参数中
例如,我猜您希望为每个操作更改单词“Add”,而不必重复整个格式字符串
您可以通过准备一个包含所有适当占位符的字符串,然后在适当的大小写块中指定它们来实现:
"your Add result 9 + 4 is 5"
现在您可以打印整行:
string format = "Your {0} result is {1} {2} {3} = {4}";
string operation = "";
string symbol = "";
double result = 0;
switch(opt)
{
case 'A':
operation = "Add";
symbol = "+";
result = num1 + num2;
break;
case 'S':
operation = "Subtract";
symbol = "-";
result = num1 - num2;
break;
break;
...
}
你看过文档了吗?这些只是你参数的索引。你为什么要这样做?目的是什么?感谢你的回答,我同意这些都是索引,但是我可以把开始索引num1和num2变量分配给索引值{1}+{7}而不是{0}+{1}吗?@DrewKennedy我只是想知道如何使用这些占位符?在每个示例中,编码器只使用占位符值{0}和{1},所以我想知道我是否可以将这些局部变量num1和num2存储到其他索引值中,如{2}或{7}或任何其他随机索引号mscorlib.dll中发生“System.FormatException”类型的未处理异常附加信息:索引(基于零)必须大于或等于零且小于参数列表的大小。此错误表示什么?太棒了!非常感谢