c#子类失去属性值



由于几天前我遇到了一个问题(你可以在这里查看这篇文章),我需要创建一种方法,使我的一些linq to sql表可以动态引用。我已经设法通过一个抽象的LogTable类来做到这一点,它包含了我在DataTable上定义的所有LogTable属性。我之所以能够做到这种抽象的方式,是因为我的LogTables具有相同的结构,因此具有相同的属性。

以下是简化后的代码:

抽象基类

public abstract class LogTableStructure
{
        public int ID { get; set; }
        public datetime? LastAccess { get; set; }
        public string Username { get; set; }
}

My (reducted) dynamic method for update a LogTable:

public void UpdateLog<T>(T currentLOG) where T : LogTableStructure
    {
        LogTableStructure logStructure = null;
        //LogTableEnum is defined on this class constructor
        switch (LogTableEnum)
        {
            case LogTableEnum.Log2009:
                logStructure = this.factory.LogDB.LOG_2009s
                    .SingleOrDefault(q => q.ID == currentLOG.ID);
                break;
            case LogTableEnum.Log2010:
                logStructure = this.factory.LogDB.LOG_2010s
                    .SingleOrDefault(q => q.ID == currentLOG.ID);
                break;
            case LogTableEnum.Log2011:
                logStructure = this.factory.LogDB.LOG_2011s
                    .SingleOrDefault(q => q.ID == currentLOG.ID);
                break;
   }
}

由于某种原因,currentLOG参数抛出一个运行时空引用异常,即使它已经填充了所有LogTable属性。我注意到通过使用vs2010调试器,而currentLOG属性被填充,基类(LogTableStructure)属性都是空的,好像基对象是空的。

我是否忘记了成员隐藏继承或类似的东西?我甚至在我的。dbml上添加了new修饰符到我的所有LogTable属性,但即使这样也没有解决问题

让你要注入的对象成为一个实际的实例:

// This object is going to have to be a class that inherits from your abstract class
// It can't be a null object of the type of your abstract class.
var logStructure = new InstanceOfLogTableStructure();
logStructure.InjectFrom(currentLOG);

应该可以了

你似乎下错了单。你将null赋值给logStructure,然后你在它上面调用InjectFrom。只有这样,您才能将工厂创建的实例分配给该变量。

最新更新