在其他方法中使用char变量*编辑*

时间:2014-02-25 19:33:06

标签: c# variables methods console-application pass-by-reference

我正在尝试从用户那里获取一串字符并将其转换为电话号码。

我们还没有在课堂上讨论数组,所以我不想在这个程序中使用类似的东西。我也不太了解他们。我们通过了参考文献,但我并不理解它。

我的问题是我如何在其他方法中使用我的char变量?我已经尝试将变量放在类下面,但也没有用。我收到的最常见的错误消息是:

  

非静态字段方法需要对象引用。

这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Damian_CIS170B_Lab4
{
    class Program
    {
        //char char1;

       static void Main(string[] args)
        {
            Console.WriteLine("****Phone Dialing Program****\n");

            char char1;

                //char2, char3, char4, char5, char6, char7;

            GetInput(ref char1);
            ProcessInput();
            ToDigit();
            ShowResults();

            Console.Read();
        }

        static void GetInput(ref char1)
        {
            Console.WriteLine("Enter your first character:");
            Console.ReadLine() = char.Parse(char1);

           /* Console.WriteLine("Enter your second character:");
              Console.WriteLine("Enter your third character:");
              Console.WriteLine("Enter your fourth character:");
              Console.WriteLine("Enter your fifth character:");
              Console.WriteLine("Enter your sixth character:");
              Console.WriteLine("Enter your seventh character:"); */
        }    

        static void ProcessInput()
        {
        }

        static void ToDigit()
        {
        }

        static void ShowResults()
        {
        }
    }
}

所以我选择了这个

            Console.WriteLine("Enter your first character:");
            char1 = Console.ReadKey().KeyChar;

14年2月25日 当我使用它时它只输入第一个字符。我能够输入2但是当我试图让它写出所有的字符时它只写第一个,为什么呢?我怎样才能解决这个问题? 新代码:

 static void Main(string[] args)
    {
        Console.WriteLine("****Phone Dialing Program****\n");

        char char1 = default(char);
        char char2 = default(char);
        char char3 = default(char);
        char char4 = default(char);
        char char5 = default(char);
        char char6 = default(char);
        char char7 = default(char);


        GetInput(ref char1, char2, char3, char4, char5, char6, char7);
        ProcessInput(ref char1, char2, char3, char4, char5, char6, char7);
        //ToDigit(ref char1, char2, char3, char4, char5, char6, char7);
        ShowResults();


        Console.Read();
    }

    static void GetInput(ref char char1, char char2, char char3, char char4, char char5, char char6, char char7)
    {
        Console.WriteLine("Enter your first character:");
        char1 = Console.ReadKey().KeyChar;

        Console.WriteLine("\nEnter your second character:");
        char2 = Console.ReadKey().KeyChar;

        Console.WriteLine("\nEnter your third character:");
        char3 = Console.ReadKey().KeyChar;

        Console.WriteLine("\nEnter your fourth character:");
        char4 = Console.ReadKey().KeyChar;

        Console.WriteLine("\nEnter your fifth character:");
        char5 = Console.ReadKey().KeyChar;

        Console.WriteLine("\nEnter your sixth character:");
        char6 = Console.ReadKey().KeyChar;

        Console.WriteLine("\nEnter your seventh character:");
        char7 = Console.ReadKey().KeyChar;

        ToDigit(ref char1, char2, char3, char4, char5, char6, char7);

    }

    static void ProcessInput(ref char char1, char char2, char char3, char char4, char char5, char char6, char char7)
    {
        char[] chars = { char1, char2, char3, char4, char5, char6, char7 };
        string enteredChars = new string(chars);

        //This is me just trying to see if it is working... its not :(
        Console.WriteLine("This is what you entered: {0}", enteredChars);

    }

    static void ToDigit(ref char char1, char char2, char char3, char char4, char char5, char char6, char char7)
    {
        switch(char1)
        {
            case 'A':
            case 'a':
            case 'B':
            case 'b':
            case 'C':
            case 'c':
            case '2': Console.WriteLine("\n2");
                break;
            default: Console.WriteLine("\n");
                break;
        }

    }

    static void ShowResults()
    {
    }

4 个答案:

答案 0 :(得分:0)

你的方法应该是:

static void GetInput(ref char char1)
{
    Console.WriteLine("Enter your first character:");
    char1 = Console.ReadKey().KeyChar;
}

您缺少参数中的数据类型。

然后称之为:

char char1 = default(char);
GetInput(ref char1);

在你的方法中,你不需要char.Parse,而是我相信你正试图从用户那里得到一个字符输入,应该这样做:

char1 = Console.ReadKey().KeyChar;

您还可以修改方法以获取char,而不是使用ref关键字发送参数。

答案 1 :(得分:0)

你应该在这里指定参数类型,这不会编译:

static void GetInput(ref char1)

应该是这样的:

static void GetInput(ref char char1)

然后在将变量作为ref参数传递给函数之前,您应该初始化它,这意味着您应该将它赋予默认值:

char char1 = default(char);

然后你可以将它传递给你的函数:

GetInput(ref char1);

如果你想在你的其他函数中使用这个变量,而不是使用ref我会将我的方法定义为扩展方法并返回结果char,如下所示:

public static class MyCharExtensions
{
    public static char GetInput()
    {
        return Console.ReadKey().KeyChar;
    }
    public static char ProcessInput(this char source)
    {
        // do your work with char and return it
    }
    public static char ToDigit(this char source)
    {
        // do your work with char and return it
    }
    public static void ShowResults(this char source)
    {

    }
}

并像这样使用它们:

MyCharExtensions.GetInput().ProcessInput().ShowResults();

答案 2 :(得分:0)

通过引用传递允许您的方法更改值并将该值反映在方法之外,但是仍然需要有值。您所描述的错误是因为您尚未初始化char1 。有两种简单的方法可以解决这个问题,第一种方法是初始化char1:char char1 = 'x';。另一种方法是从传递引用更改为传递作为输出参数。出于您的目的,refoutput之间的区别在于ref期望在调用方法之前初始化值,并且输出期望在被调用的方法中的某处初始化它。

答案 3 :(得分:0)

你必须使用ref吗?如果没有,只需让GetInput返回char而不是空。这可能是一个开始:

static void Main(string[] args)
    {
        Console.WriteLine("****Phone Dialing Program****\n");

        char first = GetInput("first");
        char second = GetInput("second");
        char third = GetInput("third");
        char fourth = GetInput("fourth");
        char fifth = GetInput("fifth");
        char sixth = GetInput("sixth");
        char seventh = GetInput("seventh");
        char eighth = GetInput("eigth");

        Console.Write(new string(new []{first,second,third,fourth,fifth,sixth,seventh,eighth}));

        Console.Read();
    }

    static char GetInput(string count)
    {
        Console.WriteLine("Enter your " + count + " character:");
        return Console.ReadLine()[0];
    }