【发布时间】:2011-12-09 05:50:19
【问题描述】:
我想使用反射来恢复类型信息。我有
public Foo(object coll, string tValue)
{
var x = col1 as IList;
if (x != null)
x.Action();
var y = col1 as IDictionary;
if (y != null)
y.Action();
}
但想拥有
public Foo(object coll, string tValue)
{
var x = col1 as IList<TValue>;
if (x != null)
x.Action();
var y = col1 as IDictionary<int, TValue>;
if (y != null)
y.Action();
}
如果只给定包含的类名,是否可以使用泛型接口而不是老式的非泛型集合接口?
一旦建立了局部变量类型,我想避免在循环集合时支付反射和动态调用惩罚。
另一个例子,也许更清楚:
var list = new Dictionary<int, MyObject>();
list.Add(100, new MyObject());
object listObject = list;
var x = listObject as IDictionary<int, dynamic>;
if (x != null)
{
foreach (var entry in x)
{
Console.WriteLine(entry.Key);
Console.WriteLine(entry.Value);
}
}
x 为空...
【问题讨论】:
-
在你调用这个函数的地方知道类型吗?是否可以使用泛型(即,使 Foo 函数泛型)。
-
您的集合中的项目数量是否需要优化反射对性能的影响?做你想做的事情的反射实际上非常快,就像在中端 CPU 上每次调用只需几纳秒。谷歌基准测试。
标签: c#-4.0 reflection types collections