2013-07-04 2 views
0

Я хотел бы выполнить бросок, как показано ниже:Cast объекта в общий тип

if (prop.PropertyType.GetGenericTypeDefinition() == typeof(ObjectSet<>)) 
     { 
     if (prop.Name.StartsWith("NV_")) 
      { 
      var nvLookupTable = (prop.GetValue(context) as ObjectSet<>); 
      // I know the above statement is wrong. I'd like to cast 
      // it as an ObjectSet<NV_Something> where NV_Something is the name 
      // of the database table 

Я забыл эти вещи каждые несколько лет/месяцев/недель, особа. когда я под давлением.

+1

Как я добавил в своем комментарии к вашему другому вопросу, вы не можете (и вы должны почти наверняка использовать приведение вместо 'as' в любом случае). Вы ничего не сказали о том, что вы пытаетесь сделать * со значением после этого, что затрудняет помощь. –

+1

Вы не можете сделать это в одном утверждении: если вы хотите статически типизированный 'var', вам нужно будет использовать цепочку' if'-'then'-'sese'. В противном случае вы можете использовать 'dynamic'. – dasblinkenlight

+0

@JonSkeet: Спасибо. Извините, я, возможно, разместил этот вопрос, пока вы вводили комментарий в моем предыдущем вопросе. На данный момент я использовал отражение. Я просто хотел прочитать значения свойств из ObjectSet . Я думал, что сильно типизированный объект будет приятным. Кажется, я ошибся. Имейте смутное воспоминание о наличии встроенной оболочки вокруг отражения, чтобы получить строго типизированный интерфейс для отраженного объекта времени выполнения. Большое спасибо. –

ответ

1

Ну, мой хрустальный шар в эксплуатации. Поэтому я предполагаю, что вы пытаетесь либо:

  1. Динамический доступ к собственности.
  2. Динамически вызвать общий метод
  3. Динамически вызова экземпляра объекта

1)

dynamic dObj = bla; 
dObj.Prop 

2) Динамический универсальный метод

// example looks close to yout issue, (checking removed for brevity) 
// call method GetRespository<poco> dynamically on any object that implements ILuw 
// the result passed back is also dynamic. For obvious reasons.  

public static dynamic GetDynamicRepository(ILuw iLuw, string pocoFullName) { 
     //null checks removed for demo.... 
     var pocoType = Type.GetType(pocoFullName); 
     MethodInfo method = typeof(ILuw).GetMethod("GetRepository"); 
     MethodInfo generic = method.MakeGenericMethod(pocoType); 

     var IRepOfT = generic.Invoke(iLuw, null); 
     dynamic repOfT = IRepOfT; 
     return repOfT; 
    } 

3) Динамическое создание общего экземпляра, примером является создание хранилища

+0

Спасибо. Я просто использовал 'dynamic'. –

Смежные вопросы