Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 有没有办法创建一个新类';s与另一个类的类型相同,但不直接指定它_C# 4.0 - Fatal编程技术网

C# 4.0 有没有办法创建一个新类';s与另一个类的类型相同,但不直接指定它

C# 4.0 有没有办法创建一个新类';s与另一个类的类型相同,但不直接指定它,c#-4.0,C# 4.0,我有这样的扩展方法 public static void DoStuff(this ObjectContext context) { using(var newContext = new MyEntitiesContext()) { // do stuff newContext.SaveChanges(); } context.SaveChanges(); } 我想知道是否有一种方法可以创建一个与传入的上下文类型相同的上下文,而不

我有这样的扩展方法

public static void DoStuff(this ObjectContext context)
{
    using(var newContext = new MyEntitiesContext())
    {
        // do stuff
        newContext.SaveChanges();
    }
    context.SaveChanges();
}
我想知道是否有一种方法可以创建一个与传入的上下文类型相同的上下文,而不是指定MyEntitiesContext


如果您不介意反思,请提前感谢

var context = Activator.CreateInstance(context.GetType());
现在您要么需要一个基类型,要么——如果您仍然不介意反射的话——只需按名称调用该方法即可。或者,因为您使用的是C#4,所以可以使用dynamic

编辑:您也可以这样做:

public static void DoStuff<T>(this T context) where T : ObjectContext, new()
{
    using(var newContext = new T())
    {
         // do stuff
        newContext.SaveChanges();
    }
    context.SaveChanges();
}
publicstaticvoiddostuff(这个T上下文),其中T:ObjectContext,new()
{
使用(var newContext=newt())
{
//做事
SaveChanges();
}
SaveChanges();
}

我不知道在扩展方法中更新DB上下文是否正确。也许你应该在这里重新考虑你的解决方案。只是一个想法。另外,ObjectContext和MyEntityContext之间有什么区别?如果这是L2SQL,请查看“MyEntitiesContext”的代码-它将从ObjectContext继承-因此无需传入ObjectContext,只需传入MyEntitiesContext即可。谢谢maxem。我试试这个,然后再打给你。