2010-08-02 4 views
1

나는 긴 코드를 짧게 만들려고 노력하고있다. 원본 코드는 다음과 같은 작업을 수행합니다.ObjectSet <EntityObject>에 ObjectSet <table1>을 전송할 수 있습니까?

using (var context = new DataEntities()) 
{ 
context.Table1.Foreach(x =>{ 
    // Omit ... updating UI 
    DoSomething(x); 
    // Omit ... updating UI      
}); 

context.Table2.Foreach(x => 
{ 
    // Omit ... updating UI 
    DoSomething(x); 
    // Omit ... updating UI      
}); 

context.Table3.Foreach(x => 
{ 
    // Omit ... updating UI 
    DoSomething(x); 
    // Omit ... updating UI      
}); 
// continue... 
} 

여기에 비슷한 코드가 많이 있습니다. 그래서 저는 리팩터링해야한다고 생각했습니다. 컨텍스트를 캐스팅 할 수 없기 때문에 나에게 꽤 어렵습니다. 예를 들어, 테이블 1에 대해 문맥을 캐스팅 할 수 있습니다. 테이블 1에 대해 ObjectSet<EntityObject>을 사용하면 테이블에 대해 동일한 작업을 수행하는 메서드를 구현할 수 있습니다.

비슷한 코드를 메서드에 넣기 만하면 좋은 아이디어가 있습니까? 사전에

감사합니다,

답변

3

Generics?

private void DoSomethingWithAnyTable<T>(ObjectSet<T> table) where T : EntityObject 
{ 
    table.Foreach(x =>{ 
     // Omit ... updating UI 
     DoSomething(x); 
     // Omit ... updating UI      
    }); 
} 

그런 다음

DoSomethingWithAnyTable(context.Table1); 
DoSomethingWithAnyTable(context.Table2); 
DoSomethingWithAnyTable(context.Table3); 
+0

훌륭하게 작동합니다. 고마워요! –

2

당신은 그들의 IEnumerable<T>를 얻을 수 .Cast<SomeCommonType>을 사용할 수 있어야합니다? 가정하면 입니다.

그렇지 않으면; 아마도 IEnumerable일까요? (비 일반)

관련 문제