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”类型的未处理异常附加信息:索引(基于零)必须大于或等于零且小于参数列表的大小。此错误表示什么?太棒了!非常感谢