default(T) 返回 null,其中 T 继承自 DataContext

本文关键字:其中 继承 DataContext null 返回 default | 更新日期: 2023-09-27 18:31:07

我的示例代码:

public class GenericClass<T> : IDisposable where T: System.Data.Linq.DataContext 
{
    public T context{ get; private set; }       
    public GenericClass()
    {
        this.context= default(T); // default(T) return null
        // code
    }       
    public void Dispose()
    {
        context.Dispose();
    }
}

使用 GenericClassess 示例代码:

using (GenericClasss <DataAccessDataContext> dataAccess = new GenericClasss <DataAccessDataContext>())
{
  //code
}

其中DataAccessDataContext是 .dbml(继承 System.Data.Linq.DataContext)并具有默认构造函数

对不起,如果这是简单的事情,我没有注意到。谢谢。

default(T) 返回 null,其中 T 继承自 DataContext

这是

引用类型的默认值的预期行为,default(T) ,其中T引用类型是 null

如果您不想从泛型类型创建新对象,则应使用 new() 关键字:

public class GenericClass<T> : IDisposable where T: System.Data.Linq.DataContext, new()

并在构造函数中调用new T()

public GenericClass()
{
    this.context = new T();
}

编译器必须知道T具有默认构造函数。

如果您尝试实例化新上下文,则可以执行以下操作:

public GenericClass()
{
    this.context = new T();
}  

使用泛型new()约束定义类:

public class GenericClass<T> : IDisposable where T: System.Data.Linq.DataContext, new()
{
    ...

和使用

this.context = new T(); 

见 http://msdn.microsoft.com/en-us/library/bb384067.aspx