我在现有代码(基本登录页面)中添加了一个哈希函数,期望返回一个String。这是功能:
Public Shared Function sha256_hash(value As [String]) As [String]
Using hash As SHA256 = SHA256Managed.Create()
Return [String].Join("", hash.ComputeHash(Encoding.UTF8.GetBytes(value)).[Select](Function(item) item.ToString("x2")))
End Using
End Function
当我尝试登录时,我得到以下内容:
InvalidCastException:无法转换类型' WhereSelectArrayIterator`2 [System.Byte,System.String]'输入' System.String []'。
我尝试寻找解决方案,但一无所获。我对vb.net没有经验,所以非常感谢帮助。
编辑: 此函数似乎在localhost中正常工作,但是当发布到Web服务器时它崩溃了。这可能是一个框架问题吗?
答案 0 :(得分:2)
我可以使用.NET 3.5重现您的情况,正如Damien_The_Unbeliever所说,它不包含String.Join<T>(string,IEnumerable<T>)
。
String.Join
期待一个String
和Select
数组确实返回IEnumerable(Of T)
话虽如此,您需要通过以下
更改您的代码Public Shared Function sha256_hash(value As [String]) As [String]
Using hash As SHA256 = SHA256Managed.Create()
Return [String].Join("", hash.ComputeHash(Encoding.UTF8.GetBytes(value)).[Select](Function(item) item.ToString("x2")).ToArray())
End Using
End Function
要使它在.NET 2.0中工作,你需要删除自{3.}}语句,因为它是在.NET 3.5中引入的,然后你可以简单地做一个foreach而不是Select
在Select
返回的数组上,如下所示。
.ComputeHash
希望这有帮助