在try块中创建对象

时间:2016-10-16 14:06:09

标签: c#

我目前正在完成一项家庭作业,遇到了一个我无法在书中或网上找到答案的问题。我没有找人来修改我的代码,我只需要指出正确的方向。

我目前正在尝试在try块中创建一个对象。在尝试阻止之前,我要求用户输入4个数字。这4个数字是我试图在try块中创建的对象的参数。我不确定如何将这些数据从用户传递到try块。

我的问题是,我应该如何在try块中创建一个对象?我知道我的当前代码一旦到达try块就会将所有内容重置为0。

    static void Main(string[] args)
    {

        string choice;



        //Input once choice is made----------------------------------------------
        do
        {
            Console.WriteLine("**********************************************");

            Console.WriteLine("Create Checking Account \"C\"");
            Console.WriteLine("Create Checking Account \"S\"");
            Console.WriteLine("Quit the Application    \"Q\"");

            Console.WriteLine("**********************************************");

            Console.Write("Enter choice:  ");
            choice = Convert.ToString(Console.ReadLine());

            if (choice != "Q")
            {

                switch (choice)
                {
                    case "C":


                        Console.Write("Enter a name for the Account:  ");
                        CA.setAccountName(Convert.ToString(Console.ReadLine()));
                        Console.Write("Enter an account Number:  ");
                        CA.setAccountNumber(Convert.ToInt32(Console.ReadLine()));
                        Console.Write("Enter an initial balance:  ");
                        CA.setBalance(Convert.ToDecimal(Console.ReadLine()));
                        Console.Write("Enter the fee to be charged per transcation:  ");
                        CA.setFeeCharged(Convert.ToDecimal(Console.ReadLine()));
                        try
                        {
                            CheckingAccount CA = new CheckingAccount("",0,0,0);


                            CA.PrintAccount();
                        }

                        catch (Negative ex)
                        {
                            Console.WriteLine("**********************************************");
                            Console.WriteLine(ex.Message);
                        }



                        break;

4 个答案:

答案 0 :(得分:1)

你不能做的是在你宣布它之前引用一个对象。在引用CA之前,您甚至会在这些调用之前声明并创建它们。

关于try块上的问题并创建对象:在try块之外创建指针并将其分配到`try块中。然后,您可以在try块外部访问它,假设没有处理过的异常。

// outside of try
CheckingAccount CA = null;
try
{
     CA = new CheckingAccount("",0,0,0);
     /* Rest of the code unchanged*/

答案 1 :(得分:1)

您有一个名为CA的对象实例。 在try块之前放入数据,在try块中创建一个具有相同名称的新实例,这将覆盖旧实例并且数据丢失。 为什么要在try块中添加新实例?

答案 2 :(得分:0)

除了伊戈尔的回答:

您需要先存储值,以便稍后将它们传递给对象的构造函数,而不是直接设置刚刚读取的值。

而不是

CA.setAccountName(Convert.ToString(Console.ReadLine()));

使用

// You probably don't even need the Convert.ToString() here,
// since the read line is already a string.
string accountName = Convert.ToString(Console.ReadLine());

以后

// Do the same for the other values and replace the 0s.
CA = new CheckingAccount(accountName,0,0,0);

答案 3 :(得分:0)

在try块外部创建的变量仍然可以在其中使用。所以你可以这样做:

var accountName = Console.ReadLine();
var accountNumber = Int.Parse(Console.ReadLine());
var balance = Decimal.Parse(Console.ReadLine());
var feeCharged = Decimal.Parse(Console.ReadLine());
try
{
    var CA = new CheckingAccount(accountName,accountNumber,balance,feeCharged);
    CA.PrintAccount();
}
catch
{
// stuff
}

如果您需要在try块之后使用该帐户,请先申报。即 CheckingAccount CA = null;尝试阻止之前的某个地方。

注意:我也会将用户输入处理到try块中。用户输入无法转换为数字的内容是您可能想要处理的例外情况。