2014-03-04 51 views
0

我試圖打印稱爲Transactions的通用鏈接列表的內容,但輸出是「Task3.Transaction」。通用鏈接列表具有Transaction類作爲其數據類型,因爲我使用Transaction類在鏈接列表中創建節點。如何打印通用鏈接列表的內容?

這裏是我的代碼:

在我的代碼的一部分,其中的問題是有* *在它的兩側。

private void button1_Click(object sender, EventArgs e) 
{ 
    LinkedList<Transaction> Transactions = new LinkedList<Transaction>(); //create the generic linked list 

    SqlConnection con = new SqlConnection(@"Data Source=melss002; Initial Catalog=30001622; Integrated Security=True"); //Connection string 

    int accNum = Int32.Parse(Microsoft.VisualBasic.Interaction.InputBox("Please enter account number", "Account Number")); //Prompt the user for account number 


    SqlCommand cmd = new SqlCommand("Select * From Transactions where AccountNo = " + accNum, con); //command to execute 
    con.Open(); //open the connection to the database   
    SqlDataReader reader = cmd.ExecuteReader(); 


    if (reader.HasRows)//Check if the table has records 
    { 
     while (reader.Read()) //read all records with the given AccountNo 
     { 
      Transaction Transaction001 = new Transaction(reader.GetInt32(0), reader.GetDateTime(1), reader.GetString(2), reader.GetString(3), reader.GetDouble(4)); //New Transaction node 
      Transactions.AddFirst(Transaction001);// add the node to the Doubly Linked List (Transactions) 
     } 
    } 
    else 
    { 
     MessageBox.Show("No records found"); 
    } 

    PrintNodes(Transactions); 

    reader.Close(); 
    con.Close(); 
} 

public void PrintNodes(LinkedList<Transaction> values) 
{ 
    if (values.Count != 0) 
    { 
     txtOutput.Text += "Here are your transaction details:"; 

     **foreach (Transaction t in values)** 
     { 
      txtOutput.Text += "\r\n" + t; 
     } 
     txtOutput.Text += "\r\n"; 
    } 
    else 
    { 
     txtOutput.Text += "The Doubly Linked List is empty!"; 
    } 
} 
+0

你是否覆蓋了'Transaction類'的'.ToString()'方法? – jacqijvv

+0

請添加'Transaction'類代碼。 – varocarbas

回答

2

當您轉換實例的類型(除string)爲一個字符串,如當你:

txtOutput.Text += "\r\n" + t; 

的CLR( .NET運行時)將調用傳遞對象上的方法ToString()。這是一種從System.Object(在.NET中非常少的類型不是從Object派生)繼承的所有類型的方法。

但是,默認實現只是返回類型的名稱。

您需要在您的類型中覆蓋Object.ToString()。並返回一個更有意義的字符串。

例如,

public class Transaction { 
    //... 
    public override string ToString() { 
    // Guess field names from constructor: 
    // new Transaction(reader.GetInt32(0), reader.GetDateTime(1), reader.GetString(2), reader.GetString(3), reader.GetDouble(4)) 

    return String.Format("#{0}: {1} {2} {3} {4} {5}", id, timestamp, string1, string2, number); 
    } 
    // ... 

理想的溢流交談的IFormatProvider並傳遞通過到格式化功能也應當存在(並且將由String.Format,這些方法如果可用使用)。更好地實施IFormattable

+0

好的非常感謝你!這是絕對有道理的。 – Maattt

+0

我已經取消了只是改變格式的編輯:它沒有添加任何內容。 – Richard

0

重寫Transaction類中的ToString方法。 默認情況下,它輸出類型的名稱。這隱含發生,當你調用這個:

txtOutput.Text += "\r\n" + t;