检查.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;
            }
        }
    } 

但是我想要一个更好的方法,有人有主意吗?

检查.net对象是否为空的优雅方法

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将导致异常