Yur*_*oor 1 c# dll tuples dynamic
假设我有一个像这样的方法的dll:
public (string, List<string>) MyMethod(NameValueCollection Settings, MyClass1 params)
{
 //do something
 return (result, errorList);
}
现在从我的主项目中我会这样称呼它:
var shipmentNumber = string.Empty;
var errorList = new List<string>;
var DLL = Assembly.LoadFile($@"{AppDomain.CurrentDomain.BaseDirectory}{appSettings[$"{parameters.TestCase}_DLL_Name"]}");
Type classType;
classType = DLL.GetType($"{appSettings[$"{parameters.TestCase}_DLL_Name"].Replace(".dll", "")}.MyService");
dynamic d = Activator.CreateInstance(classType);
(result, errorList)= d.MyMethod(appSettings, params);
但是这会在这里显示的最后一行给出错误Cannot deconstruct dynamic objects.有没有办法可以在这里正确地返回元组?
Jon*_*eet 10
根据编译器错误消息,您不能将解构与动态值一起使用.
在这种情况下,您知道您的方法将返回一个元组,因此要么将结果转换为:
(result, errorList) = ((string, List<string>)) d.MyMethod(appSettings, params);
或者分配给元组然后解构:
(string, List<string>) tuple = d.MyMethod(appSettings, params);
(result, errorList) = tuple;
请注意,使用双括号看起来有点时髦,但它们是必要的:外括号用于转换语法; 内括号用于元组类型语法.
这是一个完整的简单示例:
using System;
class Test
{
    static void Main()
    {
        dynamic d = new Test();
        // Variables we want to deconstruct into
        string text;
        int number;
        // Approach 1: Casting
        (text, number) = ((string, int)) d.Method();
        // Approach 2: Assign to a tuple variable first
        (string, int) tuple = d.Method();
        (text, number) = tuple;
    }
    public (string, int) Method() => ("text", 5);
}