gpt4 book ai didi

c# - MissingMethodException 未处理

转载 作者:行者123 更新时间:2023-11-30 21:00:59 26 4
gpt4 key购买 nike

我正在通过反射创建一个程序集。当我尝试运行我的应用程序时,我得到一个 MissingMethodExeption:

        // public static bool berekenQueens(int Row, int N, bool[,] bord)
objType.InvokeMember("berekenQueens",
BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Static,
null, instance, null);

// private static bool bordValidatie(int currentRow, int currentCol, bool[,] currentBord, int N)
objType.InvokeMember("bordValidatie",
BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Static,
null, instance, null);

我的代码(单击菜单项时我想创建一个程序集并加载类)

    private void MenuItem_Click(object sender, RoutedEventArgs e)
{
// Create an assembly object to load our classes
string path = System.Environment.CurrentDirectory + "\\NQueens.dll";
Assembly ass = Assembly.LoadFile(path);
Console.WriteLine(path);

Type objType = ass.GetType("NQueens.NQueen");

// Create an instace of NQueens.NQueen
var instance = Activator.CreateInstance(objType);

// public static bool berekenQueens(int Row, int N, bool[,] bord)
objType.InvokeMember("berekenQueens",
BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Static,
null, instance, null);

// private static bool bordValidatie(int currentRow, int currentCol, bool[,] currentBord, int N)
objType.InvokeMember("bordValidatie",
BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Static,
null, instance, null);
}

我要加载的方法来 self 的项目 NQueens。

public class NQueen
{
public static bool berekenQueens(int Row, int N, bool[,] bord)
{
if (Row >= N) return true;
for (int Col = 0; Col < N; Col++)
{
//Q toevoegen
bord[Row, Col] = true;
//Q + Q volgende Row controleren
if (bordValidatie(Row, Col, bord, N) && berekenQueens(Row + 1, N, bord))
{
return true;
}
//Q verwijderen indien niet door controle
bord[Row, Col] = false;
}
return false;
}


private static bool bordValidatie(int currentRow, int currentCol, bool[,] currentBord, int N)
{
int colstep = 1;
for (int i = currentRow - 1; i >= 0; i--)
{
//rechte lijn
if (currentBord[i, currentCol])
return false;
//linker diagonaal
if (currentCol - colstep >= 0)
{
if (currentBord[i, currentCol - colstep])
return false;
}
//rechter diagonaal
if (currentCol + colstep < N)
{
if (currentBord[i, currentCol + colstep])
return false;
}
colstep += 1;
}
return true;
}
}

谁能帮我解决这个问题?

最佳答案

Binder 也使用参数来找到合适的方法。您没有方法 void berekenQueens() 因此调用 InvokeMember 并将 null 作为最后一个参数(参数数组)将不会提供匹配的方法。您实际上并不需要该实例(因为该方法是静态的),因此如果您愿意,可以将其保留为空。

      Type objType = ass.GetType("NQueens.NQueen");
// Create an instace of NQueens.NQueen
var instance = Activator.CreateInstance(objType);

var result = objType.InvokeMember("berekenQueens",
BindingFlags.InvokeMethod |
BindingFlags.Static |
BindingFlags.Public,
null,
instance,
new object[] { 1, /* Row */
1, /* N */
new bool[,] { {true,false} } /* bord */
});

关于c# - MissingMethodException 未处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14538196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com