我正在学习 C#,我正在创建一个询问用户名字的程序,如果第一个字母没有大写,程序会自动将其大写,我想将其放入一个方法中,但在返回值时遇到了问题从方法进入 Main 方法。
这是我正在尝试的代码
using System;
using System.Text;
namespace ConsoleApp1
{
class Program
{
//Method for letter capitalisation
static string capitalise(string userName, char letter) { //users name, letter being replaced
letter = char.ToUpper(letter); //capitalise first letter
StringBuilder sb1 = new StringBuilder(userName);
sb1.Remove(0, 1); //removes first letter
sb1.Insert(0, letter); //inserts first letter from letter object
userName = sb1.ToString(); //writes string builder into string
return userName; //returns method value to the object
}
static void Main(string[] args)
{
string firstName;
string lastName;
Console.WriteLine("What is your First Name?");
firstName = Console.ReadLine();
Console.WriteLine("What is your Last Name?");
lastName = Console.ReadLine();
char capitalFirst = firstName[0]; // writes first letter of the name as a char
if (char.IsLower(capitalFirst)) { //checks if char is lowercase
capitalise(firstName, capitalFirst); //calls for method and writes parameters
firstName = capitalise(userName); // <--- here i am trying to write the user first name as a result from the capitalise method
}
//Same for last name...
Console.WriteLine(firstName + " " + lastName);
错误:用户名在当前上下文中不存在
最佳答案
你真的想多了。
正如提到的其他答案和评论,您的问题是可变范围。在这种情况下,“范围”是指声明变量并因此可访问的代码块。
在括号对 ({
, }
) 内声明的任何变量只能在该对内访问。该区域称为 block 。方法参数 - 如示例中的 username
和 letter
只能在方法体内访问,也可以方便地用大括号分隔。
例如,这是有效的:
{
string s;
s = "blah;
Console.WriteLine(s);
}
虽然这不是
{
string s;
s = "blah"
}
Console.WriteLine(s); // s has gone out of scope and does not exist here.
在您的示例中,存在许多问题。您以两种不同的方式调用 capitalise
,其中一种 - 只有一个参数,而该方法需要两个参数 - 是无效的。
但是,眼前的问题是:
firstName = capitalise(userName);
userName
在这里无效,因为它是 capitalize
的参数。 Main
对 userName
一无所知,因为它是在不同的作用域中声明的。
你可能的意思是:
firstName = capitalise(firstName, capitalFirst);
下面是完整的工作示例。在这种情况下,使用 StringBuilder
是矫枉过正且不必要的。 StringBuilder
通常在需要通过连接一堆东西来构建非常大的字符串时使用。字符串连接需要一些分配和复制,并可能触发垃圾收集器,这可能会严重影响性能,并且在极端情况下会消耗大量内存。
祝你好运!
using System;
public class Program
{
public static string Capitalize(string s)
{
if(string.IsNullOrEmpty(s))
return string.Empty;
string result = char.ToUpper(s[0]) + s.Substring(1);
return result;
}
public static void Main()
{
string firstName;
string lastName;
Console.WriteLine("What is your First Name?");
firstName = Console.ReadLine();
Console.WriteLine("What is your Last Name?");
lastName = Console.ReadLine();
firstName = Capitalize(firstName);
lastName = Capitalize(lastName);
Console.Write("Hello, {0} {1}.", firstName, lastName);
}
}
关于c# 如何将变量从方法传递到 main?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59866267/