微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ToUpper 方法的点符号

如何解决ToUpper 方法的点符号

目标是捕捉用户的响应并将其中的所有字母大写。如何通过点表示法知道在等式的哪个部分添加此特定方法

为什么这样做

Console.Write("YES or NO: ");
string noiseChoice = Console.ReadLine().toupper();

这不会

Console.Write("YES or NO: ");
string noiseChoice.toupper() = Console.ReadLine(); 

解决方法

string noiseChoice = Console.ReadLine().ToUpper();

这不是一个方程,而是一个赋值。它有一个定义的执行顺序:

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

  1. 运行时“接受”Console 类。
  2. 然后调用其 ReadLine 方法来读取用户的输入,直到他们按下 Enter
  3. 在该输入上,它调用 ToUpper 方法以将输入转换为大写并返回该输入。

这最后一步是 = 右侧表达式的结果。

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

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

,

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

string noiseChoice = Console.ReadLine();

等号并不意味着“这些东西是平等的”。意思是“把右边的东西放到左边的东西里”。左边的东西 (string noiseChoice) 声明了一个名为 noiseChoice变量(你可以在其中放东西),右边的东西(Console.ReadLine())为您提供用户输入。所以整个事情的意思是“将用户输入放入名为 noiseChoice 的变量中”。

现在要让用户输入大写,很明显你应该把它加到右边,

string noiseChoice = Console.ReadLine().ToUpperCase();

因为这就是您要放入 noiseChoice 的东西。您想将“用户输入大写”放入 noiseChoice

如果你这样做了:

string noiseChoice.ToUpperCase() = Console.ReadLine();

那将是声明一个名为 noiseChoice.ToUpperCase() 的变量,并将用户输入放入其中,这不是您想要的,更不用说变量名不能有 . 或 {{ 1}},所以你甚至不能这样做......

,

. 是“事物内部的事物”访问器

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

您正在声明一个名为字符串类型的变量。这是您此时唯一可以做的事情,接下来您键入的内容(如果您要键入任何内容)除了分号来结束语句外,必须是 =

string name = "John";

string name;     //valid to write nothing
name = "John";

您不能对要声明的变量调用方法:

string name.Method() //no

您的“点”没有附加到 ToUppername - 它是“中间的东西”,可以让您说“右边的东西在左边的东西里面”,它让你可以访问“左边的东西”,这意味着它可以被链接起来,“左边的东西”会发生变化

int lengthWithoutA = Console.ReadLine().ToUpper().Replace("A","").Length;
  • ReadLine 返回一个字符串。在它上面加点可以让我们访问字符串类中的任何东西,比如 ToUpper
  • ToUpper 不接受任何参数并返回另一个字符串
  • 我们可以在这个新的大写字符串上调用 Replace,Replace 是一个方法,它接受两个参数并返回一个字符串(在这种情况下)它的 A 被删除了
  • 然后我们访问这个返回整数的新字符串的 Length 属性。
  • 最后,我们将此整数存储到 lengthWithoutA 变量中。

这是这一行的唯一结果输出;用户输入的内容,大写版本,无 A 版本 - 在我们获得长度并分配后,它们都丢失了。 dot dot dot 只是将它们作为中间步骤,我们只捕获了最终输出,通过将其分配给变量

代码行是从左到右计算的,但你应该明白,在像上面这样的赋值操作中,必须首先计算赋值的右侧,以生成将要赋值的值

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

string name = "John";
name.ToUpper(); 

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


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

string name = person.Name = "John";

nameperson.Name 最终都是 John,因为赋值 person.Name = "John" 已完成并返回 "John" 作为值,然后将其赋值给 name

如果你这样做了:

string name = (person.Name = "John").ToUpper()

person.Name 将再次是 John,因为该赋值首先完成(感谢括号),它返回“John”作为一个字符串,然后在其上调用 ToUpper,所以 name 将最终为“约翰”

希望这可以让您深入了解操作的顺序和点的使用,但如果有任何遗漏,请添加评论

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。