C# - 'Object'不包含'ComputeHash'的定义

Pyt*_*Ech 0 c# class arraylist 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;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

这是因为你使用的是非泛型ArrayList类型.如果您将其更改为:

var list = new List<HashAlgorithm> { crc32, md5, sha1, ... };
Run Code Online (Sandbox Code Playgroud)

没关系.基本上,编译时类型checksum目前object不是HashAlgorithm.

您应该尽可能使用强类型集合.

(您还应该使用using流语句 - 目前您还没有关闭流.)