Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';我枚举X509Store.Certificates_C#_Linq - Fatal编程技术网

C# 为什么可以';我枚举X509Store.Certificates

C# 为什么可以';我枚举X509Store.Certificates,c#,linq,C#,Linq,考虑以下代码: using (X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine)) { store.Open(OpenFlags.ReadOnly); foreach (var certificate in store.Certificates) { if (!string.IsNullOrWhiteSpace(certificate?.SubjectName

考虑以下代码:

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;
        }
    }
}
所以我可以清楚地循环检查证书,但是为什么我不能列举它们呢。为什么下面的代码会抛出编译错误

var cert = store.Certificates.FirstOrDefault(x =>
    string.IsNullOrWhiteSpace(x?.SubjectName?.Name) &&
    x.SubjectName.Name.StartsWith("CN=*.mysite.com"));
错误CS1061“X509Certificate2Collection”不包含“FirstOrDefault”的定义,并且找不到接受“X509Certificate2Collection”类型的第一个参数的可访问扩展方法“FirstOrDefault”(是否缺少using指令或程序集引用?)


您应该将其转换为能够使用它:

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

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

X509Certificate2Collection
实现
System.Collections.IList
(请注意缺少的泛型说明符),使用
Certificates.OfType().FirstOrDefault(…)