簡體   English   中英

優雅的方法來檢查.Net對象是否為空

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM