C#子类丢失属性值

时间:2011-08-27 13:32:24

标签: c# generics exception abstract-class

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

下面是减少的代码:

抽象基类

public abstract class LogTableStructure
{
        public int ID { get; set; }

        public datetime? LastAccess { get; set; }

        public string Username { get; set; }
}

更新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 debbuger,当currentLOG属性被填充时,基类(LogTableStructure)属性都是空的,就像基础对象是null一样。

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

2 个答案:

答案 0 :(得分:1)

只需将您注入实际实例的对象:

// 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);

应该这样做。

答案 1 :(得分:0)

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