首页 > 解决方案 > 一个方法返回一个元组,如何在C#中分配两个取元组结果的变量

问题描述

我是新的概念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

解决方案


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

var (certificate, resultValue) = GetDefaultCertificateStoredOnTheCard();

此资源可能会有所帮助:

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


推荐阅读