2011-08-23 46 views
0

該程序一次又一次地做類似的事情。我想減少我使用的代碼。 這是一個例子,在這個例子中它不是必需的,但我會在將來做另一件類似的事情。現在我很困惑,並說:「爲什麼我應該一個接一個地複製相同的代碼?」C# - '對象'不包含'ComputeHash'的定義

但我得到'對象'不包含'ComputeHash'錯誤的定義。在運行時它們不會是對象,它們是類。所以他們沒有相同的變量類型。我該怎麼辦?

private void button1_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog op = new OpenFileDialog(); 
    op.Filter = "ALL files(*.*)|*.*"; 
    if (op.ShowDialog() == DialogResult.OK) 
    { 
     textBox1.Text = String.Empty; 
     var list = new ArrayList() { crc32, md5, sha1 }; 
     foreach (var checksum in list) 
     { 
      using (FileStream fs = File.Open(op.FileName, FileMode.Open)) 
      { 
       foreach (byte b in checksum.ComputeHash(fs)) 
       { 
        hash += b.ToString("x2").ToLower(); 
       } 
       textBox1.Text += hash + "\r\n"; 
       hash = String.Empty; 
      } 
     } 
    } 
} 
+0

請告訴我*真正*的行'VAR名單碼=新的ArrayList(){CRC32,MD5,SHA1, ...}; ' – Jamiec

+0

這只是一個錯誤 – PythEch

回答

8

這是因爲您使用的是非通用ArrayList類型。如果將其更改爲:

var list = new List<HashAlgorithm> { crc32, md5, sha1, ... }; 

它會沒事的。基本上,checksum的編譯時間類型目前是object,而不是HashAlgorithm

您應該儘可能使用強類型集合。

(你也應該使用using報表流 - 目前你沒有關閉流)

+0

感謝您的答案! – PythEch

相關問題