在方法nameCheck
中,我只是检查是否有任何输入。
首先我尝试将方法更改为static
并创建了public
变量,但之后我意识到它无法正常工作,因为Main方法是static
所以{{1无法工作。我在网上搜索并意识到,我没有使用name
的对象,所以我解决了这个问题。
现在我不知道如何将方法nameCheck
中的string
转换为nameCheck
方法中的string
。
Main
答案 0 :(得分:2)
在nameCheck
:
n = Console.ReadLine();
这只会改变局部变量n
的值。
即使您将方法更改为static
,也无法获得预期的结果。
为此,您需要返回新字符串:
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);
答案 1 :(得分:1)
您必须在Method" 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;
}
答案 2 :(得分:1)
将方法nameCheck的返回类型更改为字符串。然后像我一样从主方法中调用它
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;
}
答案 3 :(得分:1)
不是真正的答案,而是一些一般的提示:
Program
是一个非常普遍的名字。这有效地反映了整个计划。
C#是面向对象的,但这并不意味着您可以将所有内容都设为对象并添加功能。访问修饰符和static
各有其用途。
您的班级Program
有私有方法nameCheck
。你问过自己为什么private
或者为什么不是static
而是实例方法?
C#编译器允许它,但你没有完全正确的语义。
由于nameCheck
是一种完全无状态的方法,因此您宁愿定义它static
。另外,将Program
更改为实际反映您的意图的内容
另一种方式(以及更好的OO,IMO)将有一个类Name
,其名称为string
数据成员,方法为nameCheck
。 Main
方法可以知道实例化该类并随意调用nameCheck
。
我建议重新审视OOP的基础知识并阅读它,尤其是封装。
答案 4 :(得分:0)
你的问题有很多机会。
使用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();
}
}
}
第三一个使用方法的返回值:
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))
而不是检查=="
。
答案 5 :(得分:0)
要从nameCheck返回一个字符串,你实际上需要将它从一个空格转换为一个字符串,所以......
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();
}
答案 6 :(得分:-1)
问题是nameCheck没有返回任何内容(返回类型为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);
最好阅读返回类型和指针 - 尝试为这些找到一个很好的教程。