0

我目前正在学习一个 C# 类,在该类中,我们希望将错误处理从我们的主代码中取出,并为另一个类中的所有整数构建所有错误处理和数据解析,但是问题是你只能返回一个变量.

我怎样才能将“真/假”(布尔)和解析数据从一个类返回到另一个类。

Class1.cs(主代码)

    int num1;

    Class2 class2Object = new Class2();

    public Class1()
    {
        //constructor
    }

    public void Num1Method()
    {
        string tempVal = "";
        bool errorFlag; //bool = true/false

        do
        {
            errorFlag = false; //no error & initialize

            Console.Write("Enter Num1: ");
            tempVal = Console.ReadLine();
            class2Object.IntErrorCheckMethod(tempVal);
        }//close do
        while (errorFlag == true);
    }//close Num1Method

Class2.cs(错误和解析处理)

public bool IntErrorCheckMethod(string xTempVal)
    {
        int tempNum = 0;
        bool errorFlag = false;

        try
        {
            tempNum = int.Parse(xTempVal);
        }
        catch(FormatException)
        {
            errorFlag = true;
            tempNum = 999;
        }
        return errorFlag;

    }//close int error check

所以 Class2 只会返回真/假(如果有错误与否),我怎样才能将好的解析数据返回给 Class1 以放入“int num1”变量中?

我们的教授只能考虑去掉bool并使用一个虚拟值(比如如果数据有错误,将值设置为999并返回它,然后执行if elseif检查该值是否为999然后返回错误消息,否则将数据提交给变量。

我认为它更好的代码能够对错误使用布尔值,因为 999 可能是用户输入的好数据。

任何想法表示赞赏,谢谢!

4

1 回答 1

1

您可以使用out 参数,就像.NET 中的TryParse方法一样。顺便说一句,您可以使用您的方法而不是您的方法

int tempNum;
errorFlag = Int32.TryParse(string, out tempNum);

或者,如果您真的想使用自己的方法进行解析:

public bool IntErrorCheckMethod(string xTempVal, out int tempNum)
{
    tempNum = 0;
    bool errorFlag = false;

    try
    {
        tempNum = int.Parse(xTempVal);
    }
    catch(FormatException)
    {
        errorFlag = true;
        tempNum = 999;
    }

    return errorFlag;
}

用法:

int num1;

public void Num1Method()
{
   string tempVal;  
   do
   {
      Console.Write("Enter Num1: ");
      tempVal = Console.ReadLine();          
   }
   while(class2Object.IntErrorCheckMethod(tempVal, out num1));
}

还考虑对您的方法进行一些重构:

public bool TryParse(string s, out int result)
{
    result = 0;

    try
    {
        result = Int32.Parse(s);
        return true; // parsing succeed
    }
    catch(FormatException)
    {
        return false; // parsing failed, you don't care of result value
    }
}
于 2013-07-09T21:04:06.127 回答