2011-08-23 4 views
0

프로그램에서 이와 비슷한 일이 반복됩니다. 내가 사용하는 코드를 줄이려고합니다. 예를 들어,이 예제에서는 필요하지 않지만 앞으로 비슷한 다른 것을 할 것입니다. 이제 혼란스럽고 "왜 동일한 코드를 하나씩 복사해야합니까?"라고 물었습니다.C# - 'Object'에 'ComputeHash'에 대한 정의가 없습니다.

하지만 'Object'에 '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

관련 문제