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