【问题标题】:C# GetMethod throw exception: Object reference not set to an instance of an objectC# GetMethod 抛出异常:对象引用未设置为对象的实例
【发布时间】:2016-05-18 14:39:29
【问题描述】:

我有一个我想调用的通用方法,但它抛出了下面的异常:

对象引用未设置为对象的实例。

实际上是GetMethod(...) 等于null。 但是我找不到我做错的地方,因为我在另一个班级有一个非常相似的功能。 这是简单的代码:

Class DatabaseSyncronizor
{
    ...
    internal void SyncronizeAll()
    {
           for(int i=0;i<MyList.Count();i++)
           {
                Type type=Type.GetType(MyModelClass);
                typeof(DatabaseSyncronizor).GetMethod("Synchronize",BindingFlags.NonPublic|BindingFlags.Instance).MakeGenericMethod(type).Invoke(this, null);

            }
      }


    private void Syncronize<T>() where T :class,IDate
    {
         IGenericService<T> service = new GenericService<T>(new UnitOfWorkFactory(_connectionString));
         ...
    }
}

感谢您的帮助!

问候, 蕾欧娜

【问题讨论】:

  • 很明显GetMethod是找不到方法的。请检查相关方法的拼写。
  • 请粘贴您的代码,不要在框中输入。 BingdingFlags 而不是 BindingFlags 显然是一个错字 - 您的问题的原因可能是一个错字 - 但我们无法确定,除非我们看到 exact 代码。
  • MyModelClass 变量的内容是什么?如果您对此的反应是“这不是变量,那是类的名称”,那么这是非法语法:Type.GetType(MyModelClass)
  • 感谢以上所有人。我犯了一个拼写错误......很抱歉用这个愚蠢的问题向stackoverflow发送垃圾邮件并用你所有的时间来分析我的代码:-(
  • 这不是完全的浪费...我在忘记添加 NonPublic 绑定标志后到达这里,您的帖子立即解决了我的问题。谢谢!

标签: c# generics


【解决方案1】:

您的方法称为同步而不是同步。

试试这个

typeof(DatabaseSyncronizor).GetMethod("Syncronize",BindingFlags.NonPublic|BindingFlags.Instance)
                           .MakeGenericMethod(type).Invoke(this, null);

【讨论】:

  • 无论如何让它抛出“找不到方法”异常?我花了一些时间才意识到这是因为我更改了其中一种参数类型。但是“对象引用未设置为对象的实例”并不是很有帮助。
猜你喜欢
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多