将匿名类型附加到对象;如何检索它
本文关键字:何检索 检索 对象 类型 | 更新日期: 2023-09-27 17:56:03
我正在玩.NET BackgroundWorker
类。 作为其功能的一部分,您可以调用名为 ReportProgress
的方法,该方法允许您传入后台任务已完成的百分比以及可选的用户参数。
最终,ReportProgress
调用事件处理程序,可选的用户参数成为事件参数的"UserState"成员。
这是一个快速示例,以防我不清楚:
BackgroundProcess.ReportProgress(100, new{title="complete"});
/*****later on, this method is called******/
private void myEventHandler(object sender, RunWorkerCompletedEventArgs e)
{
//e.UserState is my anonymous type defined in the call to ReportProgress(...)
}
我的问题是,如何访问匿名类型中的"title"值? 我想我需要使用反射,但到目前为止,我的运气并不好。
如果您使用的是 C# 4.0:
dynamic o = e.UserState;
o.title;
你可以使用反射,但它会很大,很慢,很丑陋。 命名类型会更明智。
不要使用匿名对象。它们的作用域仅为当前方法。一旦您离开定义它们的当前方法的范围,访问它们就会成为 PITA。因此,定义一个简单的类,然后强制转换为此类:
BackgroundProcess.ReportProgress(100, new MyClass { Title = "complete" });
然后:
private void myEventHandler(object sender, RunWorkerCompletedEventArgs e)
{
var title = ((MyClass)e.UserState).Title;
}
你不能,也没有理由不创建一个类来传递值。
可能性是投到dynamic
然后得到财产,但我不推荐它。