我正在使用反射來獲取列表並嘗試將它傳遞到接收List的委託。類型「object {System.Collections.Generic.List <T>}」VS「System.Collections.Generic.List <T>」
然而,當我使用反射我的列表的類型是:
object {System.Collections.Generic.List<T>}
當我把它傳遞給委託(泛型)我得到一個例外,因爲它期待的類型:
System.Collections.Generic.List<T>
只是爲了確認這個問題,我直接轉到了List<RealTClass>
並且工作。但是,在我的代碼中,我不想做這種不必要的轉換......也因爲我正在使用泛型。
問題1:爲什麼反射返回的對象類型爲:object { X }
?
問題#2:如何從類型中「刪除」object { X }
部分?基本上,我需要解決這個問題....
謝謝。
更新#1:一些代碼...
//METHOD receives 'obj' and 'includes'
T obj
Expression<Func<T, object[]>> includes = null
...
if (res && includes != null)
{
var array = includes.Body as NewArrayExpression;
if (array != null)
{
var exps = ((IEnumerable<object>)array.Expressions).ToArray();
for (var i = 0; i < exps.Length; i++)
{
var tartetListProperty = (exps[i] as MemberExpression).Member as PropertyInfo;
var navigationPropertyForList = tartetListProperty.GetCustomAttributes(typeof(NavigationPropertyForList)) as NavigationPropertyForList[];
if (navigationPropertyForList == null || navigationPropertyForList.Length == 0) continue;
var navigationPropertyForListString = navigationPropertyForList[0].TargetPropertyName;
if (tartetListProperty == null) continue;
var list = tartetListProperty.GetValue(obj); // WHERE I USE REFLECTION TO GET THE LIST
var listOfType = list.GetType().GetGenericArguments()[0];
var repDNI = uow.GetRepositoryDeleteNotIncludedAsyncByType(listOfType);
await repDNI(list, navigationPropertyForListString, obj.Id); // THIS IS WHERE IT FAILS
if (!res) break;
}
}
}
的repDNI
對象是正確的工作,如果我做了正確的鑄造,我遇到的唯一問題是獲得list
,類型object { X }
正在圍繞我的正確類型。
[拳擊](https://msdn.microsoft.com/en-我們/庫/ yz2be5wk.aspx)。 – Sinatr
你有異常還是編譯錯誤?你可以添加你使用的代碼嗎? – Lee
@Lee運行時異常 – Dryadwoods