为什么我不能枚举X509Store.Certificates

时间:2019-03-24 19:29:50

标签: c# linq

考虑以下代码:

enterAlwaysCollapsed

所以我可以清楚地遍历证书,但是为什么不能枚举它们。为什么以下代码会引发编译错误?

using (X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
{
    store.Open(OpenFlags.ReadOnly);

    foreach (var certificate in store.Certificates)
    {
        if (!string.IsNullOrWhiteSpace(certificate?.SubjectName?.Name) 
            && certificate.SubjectName.Name.StartsWith("CN=*.mysite.com"))
        {
            return certificate;
        }
    }
}
  

错误CS1061'X509Certificate2Collection'不包含'FirstOrDefault'的定义,并且找不到可接受的扩展方法'FirstOrDefault'接受类型为'X509Certificate2Collection'的第一个参数(是否缺少using指令或程序集引用?)

1 个答案:

答案 0 :(得分:4)

您应该对其进行投射以使其能够使用:

store.Certificates.OfType<X509Certificate2>().FirstOrDefault(x =>
    string.IsNullOrWhiteSpace(x?.SubjectName?.Name) &&
    x.SubjectName.Name.StartsWith("CN=*.mysite.com"));

store.Certificates.Cast<X509Certificate2>()将为您提供所需的IEnumerable<X509Certificate2>