将匿名类型附加到对象;如何检索它

本文关键字:何检索 检索 对象 类型 | 更新日期: 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然后得到财产,但我不推荐它