如何从私有方法获取变量到静态方法?
How to get a variable from a private method to a static method?
在方法 nameCheck
中,我只是检查是否提供了任何输入。
起初我尝试将方法更改为static
并制作了一个public
变量,但后来我意识到它不能工作,因为Main方法是static
所以name
无法工作。我在网上搜索并意识到我没有可以使用的对象 nameCheck
所以我解决了这个问题。
现在我不知道如何将方法 nameCheck
中的 string
转换为我的 Main
方法中的 string
。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hallo, wie heißt du?");
string name = Console.ReadLine();
Program a = new Program();
a.nameCheck(name);
Console.WriteLine("Hallo " + name);
Console.ReadLine();
}
private void nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
}
}
您必须 return 您的方法中的值 "nameCheck"
在您的主要方法中试试这个:
Program a = new Program();
name = a.nameCheck(name);
您的 nameCheck() 方法应如下所示:
private string nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
return n;
}
在 nameCheck
:
n = Console.ReadLine();
这只是要改变局部变量的值n
。
即使您将方法更改为 static
,您也不会得到预期的结果。
为此,您需要 return 新字符串:
private string nameCheck(string n)
{
if (String.IsNullOrEmpty(n))
{
Console.WriteLine("Geben Sie einen Namen ein")
n = Console.ReadLine();
}
return n;
}
然后您将更改 Main
方法:
Program a = new Program();
name = a.nameCheck(name);
将方法 nameCheck 的 return 类型更改为字符串。然后像我一样从 main 方法调用它
Console.WriteLine("Hallo, wie heißt du?");
string name = Console.ReadLine();
Program a = new Program();
string n=a.nameCheck(name);
Console.WriteLine("Hallo " + n);
Console.ReadLine();
private string nameCheck(string n)
{
if (n == "")
{
// Console.WriteLine("Geben Sie einen Namen ein");
return "Geben Sie einen Namen ein";
}
return n;
}
你有很多机会回答你的问题。
使用 ref
:
定义直接更改传递的字符串的方法
private void nameCheck(ref string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
}
这样称呼它:
nameCheck(ref name);
第二个 将您的方法更改为非静态方法并使用成员变量:
class program
{
private string name;
Main()
{
//...
Program p = new Program();
p.Name = p.checkName();
}
private void nameCheck()
{
if (this.name == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
this.name = Console.ReadLine();
}
}
}
第三个 一个使用 return-value 的方法:
class program
{
Main()
{
//...
Program p = new Program();
string name = ...
name = p.checkName(name);
}
private string nameCheck(string name)
{
if (name == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
name = Console.ReadLine();
}
return name;
}
}
顺便说一句,考虑使用 if (String.IsNullOrEmpty(name))
而不是检查 =="
。
问题是 nameCheck 没有 return 任何东西(return 类型是 void
)。
尝试以下操作:
private string nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
return n;
}
然后你需要改变
a.nameCheck(name);
到
name = a.nameCheck(name);
最好阅读 return 类型和指针 - 尝试为它们找到一个好的教程。
要 return 来自 nameCheck void 的字符串,您实际上需要将它从 void 变为字符串,所以...
private string nameChech(string input)
{
if(string.IsNullOrWhiteSpace(input))
return string.Empty;
/* other checking code */
return input // you can do any string that may have been altered/appended/etc
}
所以现在在您的 program.cs 中您可以做到!
static void Main(string[] args)
{
Console.WriteLine("Hallo, wie heißt du?");
string name = nameCheck(console.ReadLine());
if (name == string.Empty)
{
console.WriteLine(/* no name provided */);
return;
}
/* other checking code */
Program a = new Program();
Console.WriteLine("Hallo " + name);
Console.ReadLine();
}
不是真正的答案,而是一些一般性提示:
Program
是一个非常普遍的名字。这有效地反映了您的整个程序。
C# 是面向对象的,但这并不意味着您可以将所有内容都变成对象并添加函数。访问修饰符和 static
各有其用途。
您的 class Program
有一个私有方法 nameCheck
。您是否问过自己为什么 private
或为什么不 static
而是一个实例方法?
C# 编译器允许这样做,但您没有完全理解正确的语义。
由于 nameCheck
是一个完全无状态的方法,您宁愿定义它 static
。此外,将 Program
更改为实际上 反映您的意图的内容。
另一种方式(以及更好的 OO 方式,IMO)是使用 class 之类的 Name
以及名称的 string
数据成员和方法 nameCheck
。 Main
方法可以知道实例化 class 并随意调用 nameCheck
。
我建议重新审视 OOP 的基础知识并阅读相关内容,尤其是封装。
在方法 nameCheck
中,我只是检查是否提供了任何输入。
起初我尝试将方法更改为static
并制作了一个public
变量,但后来我意识到它不能工作,因为Main方法是static
所以name
无法工作。我在网上搜索并意识到我没有可以使用的对象 nameCheck
所以我解决了这个问题。
现在我不知道如何将方法 nameCheck
中的 string
转换为我的 Main
方法中的 string
。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hallo, wie heißt du?");
string name = Console.ReadLine();
Program a = new Program();
a.nameCheck(name);
Console.WriteLine("Hallo " + name);
Console.ReadLine();
}
private void nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
}
}
您必须 return 您的方法中的值 "nameCheck"
在您的主要方法中试试这个:
Program a = new Program();
name = a.nameCheck(name);
您的 nameCheck() 方法应如下所示:
private string nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
return n;
}
在 nameCheck
:
n = Console.ReadLine();
这只是要改变局部变量的值n
。
即使您将方法更改为 static
,您也不会得到预期的结果。
为此,您需要 return 新字符串:
private string nameCheck(string n)
{
if (String.IsNullOrEmpty(n))
{
Console.WriteLine("Geben Sie einen Namen ein")
n = Console.ReadLine();
}
return n;
}
然后您将更改 Main
方法:
Program a = new Program();
name = a.nameCheck(name);
将方法 nameCheck 的 return 类型更改为字符串。然后像我一样从 main 方法调用它
Console.WriteLine("Hallo, wie heißt du?");
string name = Console.ReadLine();
Program a = new Program();
string n=a.nameCheck(name);
Console.WriteLine("Hallo " + n);
Console.ReadLine();
private string nameCheck(string n)
{
if (n == "")
{
// Console.WriteLine("Geben Sie einen Namen ein");
return "Geben Sie einen Namen ein";
}
return n;
}
你有很多机会回答你的问题。
使用 ref
:
private void nameCheck(ref string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
}
这样称呼它:
nameCheck(ref name);
第二个 将您的方法更改为非静态方法并使用成员变量:
class program
{
private string name;
Main()
{
//...
Program p = new Program();
p.Name = p.checkName();
}
private void nameCheck()
{
if (this.name == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
this.name = Console.ReadLine();
}
}
}
第三个 一个使用 return-value 的方法:
class program
{
Main()
{
//...
Program p = new Program();
string name = ...
name = p.checkName(name);
}
private string nameCheck(string name)
{
if (name == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
name = Console.ReadLine();
}
return name;
}
}
顺便说一句,考虑使用 if (String.IsNullOrEmpty(name))
而不是检查 =="
。
问题是 nameCheck 没有 return 任何东西(return 类型是 void
)。
尝试以下操作:
private string nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
return n;
}
然后你需要改变
a.nameCheck(name);
到
name = a.nameCheck(name);
最好阅读 return 类型和指针 - 尝试为它们找到一个好的教程。
要 return 来自 nameCheck void 的字符串,您实际上需要将它从 void 变为字符串,所以...
private string nameChech(string input)
{
if(string.IsNullOrWhiteSpace(input))
return string.Empty;
/* other checking code */
return input // you can do any string that may have been altered/appended/etc
}
所以现在在您的 program.cs 中您可以做到!
static void Main(string[] args)
{
Console.WriteLine("Hallo, wie heißt du?");
string name = nameCheck(console.ReadLine());
if (name == string.Empty)
{
console.WriteLine(/* no name provided */);
return;
}
/* other checking code */
Program a = new Program();
Console.WriteLine("Hallo " + name);
Console.ReadLine();
}
不是真正的答案,而是一些一般性提示:
Program
是一个非常普遍的名字。这有效地反映了您的整个程序。
C# 是面向对象的,但这并不意味着您可以将所有内容都变成对象并添加函数。访问修饰符和 static
各有其用途。
您的 class Program
有一个私有方法 nameCheck
。您是否问过自己为什么 private
或为什么不 static
而是一个实例方法?
C# 编译器允许这样做,但您没有完全理解正确的语义。
由于 nameCheck
是一个完全无状态的方法,您宁愿定义它 static
。此外,将 Program
更改为实际上 反映您的意图的内容。
另一种方式(以及更好的 OO 方式,IMO)是使用 class 之类的 Name
以及名称的 string
数据成员和方法 nameCheck
。 Main
方法可以知道实例化 class 并随意调用 nameCheck
。
我建议重新审视 OOP 的基础知识并阅读相关内容,尤其是封装。