检查.net对象是否为空的优雅方法
本文关键字:方法 net 对象 是否 检查 | 更新日期: 2023-09-27 18:18:07
我有一个X509Certificate2
属性,我想检查设置部分,如果设置的值是空的。当我尝试访问任何X509Certificate2
属性如publickey时,我得到了这个异常:System.Security.Cryptography.CryptographicException
发生于mscorlib.dll
。
当然,我可以写一些这样的例子:
private static X509Certificate2 _certificate;
public X509Certificate2 Certificate
{
get
{
return _certificate;
}
set
{
try
{
if (value.PublicKey != null)
_certificate = value;
}
catch(CryptographicException)
{
_certificate = null;
}
}
}
但是我想要一个更好的方法,有人有主意吗?
MSDN提示"密钥值不是RSA或DSA密钥,或者密钥不可读。"也许你的算法不是RSA或DSA。检查返回GetKeyAlgorithm()
您可以使用简单的选项-访问Handle属性:
public X509Certificate2 Cretificate
{
get { return _certificate; }
set { _certificate = value.Handle == IntPtr.Zero ? null : value}
}
我知道,否则当你定义:
X509Certificate2 cert = new X509Certificate2();
并尝试使用空证书设置您的证书-您可能会得到一个异常。
可以使用空合并运算符:
public X509Certificate2 Certificate
{
get { return _certificate; }
set { _certificate = value.PublicKey ?? null; }
}
基本上:
_certificate = value。如果PublicKey不为空,则等于空
但是现在写这个,我认为这将不起作用,所以可能需要使用三元:
public X509Certificate2 Certificate
{
get { return _certificate; }
set { _certificate = value == null ? null : value.PublicKey; }
}
这意味着:
_certificates = null如果value为null,则等于value。PublicKey
我认为这是正确的方法,因为您的值为null将导致异常