[英]Elegant way to check if .Net object is empty
我有一个X509Certificate2
属性,如果要设置的值为空,我想检查一下set部分。 当我尝试访问任何X509Certificate2
属性(例如publickey)时,出现以下异常: mscorlib.dll
发生了System.Security.Cryptography.CryptographicException
。
当然,我可以写一些这样的例子:
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();
并尝试使用空证书设置证书-您可能会遇到异常。
您可以使用null合并运算符 :
public X509Certificate2 Certificate
{
get { return _certificate; }
set { _certificate = value.PublicKey ?? null; }
}
基本上:
_certificate = value.PublicKey是否不为null,否则等于null。
但是现在写这篇文章,我认为那是行不通的,因此可能需要使用三进制 :
public X509Certificate2 Certificate
{
get { return _certificate; }
set { _certificate = value == null ? null : value.PublicKey; }
}
意思是:
_certificates = null,如果value为null,否则等于value.PublicKey
我认为这是正确的方法,因为您的值为null会导致异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.