我在类中有很多静态方法,如果某个方法在X类中,我想得到它,如果是,我想调用它.我查了一下:
if (Type.GetType("Homework.Homework.Functions").GetMethod(methodName) == null)
{
Console.WriteLine("No such method.\nPress any key to restart the program");
Console.ReadKey();
Console.Clear();
Main();
return;
}
else
Type.GetType("Homework.Homework.Functions").GetMethod(methodName).Invoke(null, parametersArray); // Invoking the method.
Run Code Online (Sandbox Code Playgroud)
但是它给了我一个带有if()的行中的System.NullReferenceException.
该计划的开始:
namespace Homework
{
class Homework
{
static void Main()
{
Run Code Online (Sandbox Code Playgroud)
课堂宣言:
public class Functions
{
Run Code Online (Sandbox Code Playgroud)
我可能应该说类函数在类Homework中.
我该如何解决这个错误?
谢谢.
Jon*_*eet 11
问题是嵌套类型用IL名称+而不是.IL名称分隔.如果你写:
Console.WriteLine(typeof(global::Homework.Homework.Functions));
Run Code Online (Sandbox Code Playgroud)
那么就CLR而言,你会看到完全限定的名称.
所以你要:
Type.GetType("Homework.Homework+Functions")
Run Code Online (Sandbox Code Playgroud)
假设你真的需要通过名字得到它 - 尽可能避免这种事情.typeof在编译时使用任何您知道类型的地方(如果它在不同的程序集中,我们很乐意提供引用).
如果你在同一个程序集中调用它,那将会有效.如果您Type.GetType从另一个程序集调用,则还需要使用程序集限定名称.
我还强烈建议您不要将类命名为与其命名空间相同的类.
| 归档时间: |
|
| 查看次数: |
1648 次 |
| 最近记录: |