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)
这是因为你使用的是非泛型ArrayList
类型.如果您将其更改为:
var list = new List<HashAlgorithm> { crc32, md5, sha1, ... };
Run Code Online (Sandbox Code Playgroud)
没关系.基本上,编译时类型checksum
目前object
不是HashAlgorithm
.
您应该尽可能使用强类型集合.
(您还应该使用using
流语句 - 目前您还没有关闭流.)