一个方法返回一个元组,如何在C#中分配两个取该元组结果的变量

问题描述 投票:3回答:1

我对Tuples的概念不熟悉。

我有一个Value Tuple方法,它返回两件事-用于数字签名的certificate和作为结果的enum(值“ success”和“ cannotsigndoc”)。

我想在两个变量中收集此方法的结果。

这里是方法:

    public (InvoiceResult resultValue, X509Certificate2 cert) GetDefaultCertificateStoredOnTheCard()
    {
        var resultValue = InvoiceResult.Success;
        X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
        store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
        X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, true);

        // by thumbprint, there is only one
        certs = certs.Find(X509FindType.FindByThumbprint, "6BB4AZD483206Z44B992799541114536579CF2B3", true);

        if (certs.Count == 0)
        {
            resultValue = InvoiceResult.CannotFindSignature;
            throw new ArgumentException("Please insert smart card to obtain certificate.");
        }
        X509Certificate2 cert = certs[0];

        RSACryptoServiceProvider key;

        if (cert.HasPrivateKey)
        {
            // software cert
            key = cert.PrivateKey as RSACryptoServiceProvider;

        }
        else
        {
            // certificate from smartcard
            CspParameters csp = new CspParameters(1, "Microsoft Base Smart Card Crypto Provider");
            csp.Flags = CspProviderFlags.UseDefaultKeyContainer;
            key = new RSACryptoServiceProvider(csp);
        }

        return (resultValue, cert);
    }

这是我想在两个变量中收集方法结果的位置:

var certificate,resultValue = GetDefaultCertificateStoredOnTheCard();

这些是我从以下内容中得到的错误:

“隐式类型的变量不能有多个声明符”

“隐式类型的变量必须初始化”

c# tuples
1个回答
1
投票

尝试通过添加括号来更改分配变量的行:

var (certificate, resultValue) = GetDefaultCertificateStoredOnTheCard();

此资源可能会有所帮助:

https://www.danielcrabtree.com/blog/17/c-sharp-7-preview-using-tuples-to-return-multiple-values

© www.soinside.com 2019 - 2024. All rights reserved.