如何从私有方法获取变量到静态方法?

时间:2016-08-01 13:00:40

标签: c# methods console-application

在方法nameCheck中,我只是检查是否有任何输入。

首先我尝试将方法更改为static并创建了public变量,但之后我意识到它无法正常工作,因为Main方法是static所以{{1无法工作。我在网上搜索并意识到,我没有使用name的对象,所以我解决了这个问题。

现在我不知道如何将方法nameCheck中的string转换为nameCheck方法中的string

Main

7 个答案:

答案 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数据成员,方法为nameCheckMain方法可以知道实例化该类并随意调用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);

最好阅读返回类型和指针 - 尝试为这些找到一个很好的教程。