C#反射,调用具有不同参数类型的方法

C# reflection, invoke method with different parameter types

我想调用一个带有反射的静态方法,该方法将一个项目和 3 个字符串作为参数,但找不到实现此目的的方法。以下面为例

internal class PropertyActionProcessor
{
    public static async Task<Solution> ModifyNameInDto(Project project, string parentName, string oldValue, string newValue)
    {
        return new AdhocWorkspace().CurrentSolution;
    }
}

如果该方法只需要 3 个字符串,我可以使用下面的行成功调用 "ModifyNameInDto"。

solution = await (Task<Solution>)typeof(PropertyActionProcessor).GetMethod($"Modify{propertyName}InDto").Invoke(null, new[] { parentName, itemName, newValue });

但是我也需要将项目传递给它,但我收到错误 "no best type found for implicitly typed array"。没有可以提供帮助的重载,我在网上找不到解决方案,这可能吗?如果可以,我该如何解决?

对于不熟悉 Project 对象的任何人,在尝试传递 int 时会发生同样的错误。

您收到错误 "no best type found for implicitly typed array",因为您传递的参数具有不同的类型。如果它们都是字符串,则隐含它是一个字符串数组。但是在你的情况下,由于有多种不同的类型,你需要给它一个提示。

例如 - 如果您提供 new object[] { new Project(), parentName, itemName, newValue },这应该可以避免编译错误。