Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从私有方法到静态方法获取变量?_C#_Methods_Console Application - Fatal编程技术网

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

C# 如何从私有方法到静态方法获取变量?,c#,methods,console-application,C#,Methods,Console Application,在方法nameCheck中,我只是检查是否给出了任何输入 起初我尝试将方法更改为static,并创建了一个public变量,但后来我意识到它无法工作,因为主要方法是static,所以name无法工作。我在网上搜索发现,我没有可以使用的对象namecheak,所以我解决了这个问题 现在我不知道如何将方法nameCheck中的string获取到我的Main方法中的string class Program { static void Main(string[] args)

在方法
nameCheck
中,我只是检查是否给出了任何输入

起初我尝试将方法更改为
static
,并创建了一个
public
变量,但后来我意识到它无法工作,因为主要方法是
static
,所以
name
无法工作。我在网上搜索发现,我没有可以使用的对象
namecheak
,所以我解决了这个问题

现在我不知道如何将方法
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();
            }
        }
    }

您必须在方法“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(ref name);

您必须在方法“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(ref name);

名称检查中

n = Console.ReadLine();
这只是要更改局部变量
n
的值

即使将方法更改为
静态
,也不会得到预期的结果

要使其工作,您需要返回新字符串:

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);

名称检查中

n = Console.ReadLine();
这只是要更改局部变量
n
的值

即使将方法更改为
静态
,也不会得到预期的结果

要使其工作,您需要返回新字符串:

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的返回类型更改为字符串。然后像我一样从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;
}

将方法nameCheck的返回类型更改为字符串。然后像我一样从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();
    }
}
可以这样称呼:

private string nameCheck(string n)
{
    if (n == "")
    {
        Console.WriteLine("Geben Sie einen Namen ein");
        n = Console.ReadLine();
    }
    return n;
}
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))< /C> >而不是检查<代码> =“ .< /P> > p>您有很多问题的机会。

使用
ref
定义直接更改传递字符串的方法:

private void nameCheck(ref string n)
{
    if (n == "")
    {
        Console.WriteLine("Geben Sie einen Namen ein");
        n = Console.ReadLine();
    }
}
可以这样称呼:

private string nameCheck(string n)
{
    if (n == "")
    {
        Console.WriteLine("Geben Sie einen Namen ein");
        n = Console.ReadLine();
    }
    return n;
}
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))< /COD>,而不是检查<代码> = =“< /代码> . 问题是nameCheck不返回任何内容(返回类型为

void

请尝试以下操作:

    private string nameCheck(string n)
    {
        if (n == "")
        {
            Console.WriteLine("Geben Sie einen Namen ein");
            n = Console.ReadLine();
        }
        return n;
    }
然后你需要改变

        a.nameCheck(name);


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

问题是nameCheck没有返回任何内容(返回类型是
void

请尝试以下操作:

    private string nameCheck(string n)
    {
        if (n == "")
        {
            Console.WriteLine("Geben Sie einen Namen ein");
            n = Console.ReadLine();
        }
        return n;
    }
然后你需要改变

        a.nameCheck(name);


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

要从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();
    }    

要从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();
    }    

这不是一个真正的答案,而是一些一般性的提示:

程序
是一个非常普遍的名称。这有效地反映了你的整个计划

C#是面向对象的,但这并不意味着你可以把所有东西都变成一个对象并添加函数。访问修饰符和
静态
各有其用途

您的类
程序
有一个私有方法
名称检查
。你有没有问过自己为什么
private
或者为什么不是
static
而是一个实例方法?
C#编译器允许这样做,但您没有完全正确地理解语义

由于
nameCheck
是一种完全无状态的方法,因此您宁愿定义它
static
。另外,将
程序
更改为实际反映您意图的内容

另一种方法(更好的OO方法,IMO)是使用一个类似于
Name
的类,使用
string
数据成员作为名称,使用方法
nameCheck
Main
方法可以根据需要实例化类并调用
nameCheck



我建议重温OOP的基础知识,并仔细阅读它,尤其是封装。

这不是一个真正的答案,而是一些一般性的技巧:

程序
是一个非常普遍的名称。这有效地反映了你的整个计划

C#是面向对象的,但这并不意味着你可以把所有东西都变成一个对象并添加函数。访问修饰符和
静态
各有其用途

您的类
程序
有一个私有方法
名称检查
。你有没有问过自己为什么
private
或者为什么不是
static
而是一个实例方法?
C#编译器允许这样做,但您没有完全正确地理解语义

由于
nameCheck
是一种完全无状态的方法,因此您宁愿定义它
static
。另外,将
程序
更改为实际反映您意图的内容

另一种方法(更好的OO方法,IMO)是使用一个类似于
Name
的类,使用
string
数据成员作为名称,使用方法
nameCheck
Main
方法可以根据需要实例化类并调用
nameCheck


我建议你重新开始