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

Nac*_*cho 2 .net c# 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用GenericClasss示例代码:

using (GenericClasss <DataAccessDataContext> dataAccess = new GenericClasss <DataAccessDataContext>())
{
  //code
}
Run Code Online (Sandbox Code Playgroud)

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

对不起,如果它很简单,我没有注意到.非常感谢你.

Chr*_*tos 6

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


Kim*_*jan 5

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

public class GenericClass<T> : IDisposable where T: System.Data.Linq.DataContext, new()
Run Code Online (Sandbox Code Playgroud)

new T()在构造函数内部调用:

public GenericClass()
{
    this.context = new T();
}
Run Code Online (Sandbox Code Playgroud)

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