我有以下介面定義
public interface IEncryptor
{
T Decrypt<T>(byte[] encryptedData) where T : class;
}
使用此實作(不應該相關)
internal class ThingyEncryptor : IEncryptor
{
public T Decrypt<T>(byte[] encryptedData) where T : class
{
var encryptedSymmetricKey = encryptedData.Take(SymmetricKeyLength).ToArray();
var iv = encryptedData.Skip(SymmetricKeyLength).Take(IvLength).ToArray();
var symmetricEncryptedData = encryptedData.Skip(SymmetricKeyLength IvLength).ToArray();
using (var rsa = _certificate.GetRSAPrivateKey())
{
var symmetricKey = rsa.Decrypt(encryptedSymmetricKey, RSAEncryptionPadding.Pkcs1);
var clearData = Decrypt(symmetricEncryptedData, symmetricKey, iv);
return JsonConvert.DeserializeObject<T>(Encoding.UTF8.GetString(clearData));
}
}
}
閱讀Constraints on type parameters (C# Programming Guide),說明:
如果客戶端代碼使用不滿足約束的型別,編譯器會發出錯誤
Decrypt呼叫這樣的方法時,我看不到任何編譯器警告或錯誤(IMyModel實際上是介面而不是類):
_encryptor.Decrypt<IMyModel>(x.Patient)
為什么?
此代碼是 nestandard20 專案的一部分。
uj5u.com熱心網友回復:
您誤解了class 約束,它將提供的型別引數強制為參考型別:
型別引數必須是參考型別。此約束也適用于任何類、介面、委托或陣列型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/420910.html
標籤:
