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

时间:2014-11-20 13:47:59

标签: c# .net generics

我的示例代码:

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();
    }
}

使用GenericClasss示例代码:

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

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

很抱歉,如果这很简单,我就不会注意到了。非常感谢你。

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

如果您无法使用通用类型创建新对象,则应使用new()关键字:

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

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

使用通用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