C# ToUpper方法的点表示法

C# ToUpper方法的点表示法,c#,string,C#,String,目标是捕获用户的响应,并使其中的所有字母都大写。如何知道在方程的哪一部分通过点符号添加此特定方法 为什么这样做有效 Console.Write("YES or NO: "); string noiseChoice = Console.ReadLine().ToUpper(); 但事实并非如此 Console.Write("YES or NO: "); string noiseChoice.ToUpper() = Console.ReadLine();

目标是捕获用户的响应,并使其中的所有字母都大写。如何知道在方程的哪一部分通过点符号添加此特定方法

为什么这样做有效

Console.Write("YES or NO: ");
string noiseChoice = Console.ReadLine().ToUpper();
但事实并非如此

Console.Write("YES or NO: ");
string noiseChoice.ToUpper() = Console.ReadLine(); 
这不是一个等式,而是一个假设。它有一个定义的执行顺序:

首先,对等号=右侧的表达式求值,并从左到右求值:

运行时采用Console类。 然后调用ReadLine方法从用户处读取输入,直到用户按Enter键。 在该输入上,它调用ToUpper方法,以便将输入转换为大写并返回该输入。 最后一步是位于=,右侧的表达式的结果

然后运行时将继续将该结果分配给左侧的可写目标


在您的情况下,该目标是一个变量;也可能是其他一些事情。但是,它不能是任意表达式,例如函数调用,因为不能为函数调用赋值。

这不是数学意义上的方程:

string noiseChoice = Console.ReadLine();
等号并不意味着这些东西是相等的。意思是把右边的东西放到左边的东西里。左边字符串noiseChoice上的东西声明了一个变量,您可以将名为noiseChoice的东西放入该变量,右边Console.ReadLine上的东西提供用户输入。因此,整个过程意味着将用户输入放入名为noiseChoice的变量中

现在要让用户输入大写,显然应该将其添加到右侧

string noiseChoice = Console.ReadLine().ToUpperCase();
因为这就是你要放进noiseChoice的东西。您希望将用户输入大写输入到noiseChoice中

如果您这样做了:

string noiseChoice.ToUpperCase() = Console.ReadLine();
这将是声明一个名为noiseChoice.ToUpperCase的变量,并将用户输入放入其中,这不是您想要的,更不用说变量名不能包含。或者,你甚至不能这么做…

。里面的东西是东西存取器吗

person.Name
person.GetName()
表示person内的name属性或person内的GetName方法

这不是一个单独的声明。要使它成为一个语句,我们必须读取它的值或分配给它

person.Name = "John";  //assignment

string n = person.Name; //reading
Print(person.Name); //read name and send into Print method as parameter
无法将方法调用分配给

如果这是数学课,你有一些函数,比如sqrt,它接受一个数字,然后输出一个数字,那么说:

sqrt(4) = 27;
=这里是赋值,不是比较;您不能为调用方法的结果赋值

当你写作时:

string name
您正在声明一个名为name of type string的变量。这是此时唯一可以做的事情,下一件键入的事情如果要键入除分号以外的任何内容来结束语句,则必须是=

string name = "John";

string name;     //valid to write nothing
name = "John";
不能对要声明的变量调用方法:

string name.Method() //no
你的圆点不附在图珀上,也不附在名字上——它是中间的东西,让你在左边的东西里面说右边的东西,它让你进入左边的东西,这意味着它可以被链接,左边的东西会改变

int lengthWithoutA = Console.ReadLine().ToUpper().Replace("A","").Length;
ReadLine返回一个字符串。关注它可以让我们访问string类中的任何内容,比如ToUpper ToUpper不接受任何参数并返回另一个字符串 我们可以对这个新的大写字符串调用Replace,Replace是一个接受两个参数并返回一个字符串的方法,在本例中,该字符串的所有a都已删除 然后我们访问这个新字符串的Length属性,它返回一个整数。 最后,我们将该整数存储到纵向中,而不使用变量。 这是该行的唯一结果输出;用户键入的内容,大写版本,no-A版本-在我们获得长度并分配它之后,它们都丢失了。点只是将它们作为中间步骤,通过将其赋给变量,我们只捕获最终输出

代码行是从左到右求值的,但您应该了解,在像上面这样的赋值操作中,必须首先求值赋值的右侧,以生成将被赋值的值

了解一些方法修改它们被调用的对象,而另一些方法返回对象的新版本,这可能也很重要。字符串在创建后不会更改,因此:

string name = "John";
name.ToUpper(); 
上面的代码是有效的,但不会改变名称;字符串不会改变。调用ToUpper返回了一个新字符串JOHN。我们没有分配它或使用它的值,所以它被扔掉了

有趣的事实是很多人都忘记了。在c语言中,赋值返回被赋值的值。这意味着这可以工作:

string name = person.Name = "John";
name和person.name都以John结尾,因为赋值person.name=John已完成,并将John作为一个值返回,然后将该值赋值到name中

如果您这样做:

string name = (person.Name = "John").ToUpper()
Name将再次成为John,因为该赋值首先完成,这要感谢括号,它将John作为字符串返回,然后返回ToUpper ca 我在上面写了很多,所以名字最后会变成约翰


希望这能让我们对dot的操作顺序和使用有一些了解,但如果有什么遗漏,请添加注释

string noiseChoice=Console.ReadLine.touper;表示请从控制台中读取一行,然后将其设为大写,您从左到右读取=右侧的代码。第二个代码示例没有意义,所以您可以告诉我们您认为它应该做什么。顺便说一句,您应该使用?.ToUpper而不是ToUpper,以防Console.ReadLine返回null。如果您是编程新手,请逐步编写代码。这并不羞耻。var输入=Console.ReadLine;var noiseChoice=输入?.ToUpper;您可以使用var或string,随您的喜好而定。第二种方法不起作用,因为它的语法无效,因为这正是语言的定义方式。另外:这不是一个等式。这是一项任务。不太可能@CaiusJard-但不妨养成好习惯。
string name = (person.Name = "John").ToUpper()