标题非常令人困惑。我将尝试用一个例子来解释。请考虑以下代码:
String[] str={"Apple","Banana","Cherry","Orange"};
var anoCollection=from e in str select new
{
ch=e[0],
length=e.Length
}
dataGridView.DataSource=anoCollection.ToList(); //TypeInitializationException
我觉得我需要在ToList<T>()
方法中提到上述类型的类型。但是我怎么能在这里提一个匿名类型?
答案 0 :(得分:3)
永远可以直接提及匿名类型,但您不应该这样做。通用类型推断意味着您不需要在<T>
中指定.ToList<T>()
- 编译器将自动注入本发明的类型。
只有几种方法可以引用匿名类型:
someObj.GetType()
,其中someObj
是匿名类型的实例T
,通过泛型类型推断调用泛型方法(如ToList()
中所述)T
GetGenericTypeParameters()
答案 1 :(得分:0)
这可能不是您要求的,但如果您以后想要将DataBoundItem用于行,则可以这样做:
var item = TypeExtensions.CastByPrototype(row.DataBoundItem, new { ch = 'a', length = 0});
//you can use item.ch and item.length here
Trace.WriteLine(item.ch);
在此方法的支持下:
public static class TypeExtensions
{
public static T CastByPrototype<T>(object obj, T prototype)
{
return (T)obj;
}
}