我正在创建一个帮助程序来过滤流/可观察对象中特定类型的对象。以下是要点:
当以下方式使用时:
以下代码中标记的行引发了以下异常:
无效转换异常:指定的转换无效。
我尝试使用
顺便说一下,这是在使用 UniRx 的 Unity3D 中。
public interface IGameAction { }
// Example action
public struct OpenDoorAction : IGameAction { }
// In Store.cs
public Subject<IGameAction> Actions;
public IObservable<T> When<T>() where T : IGameAction
{
// Exception here
return (IObservable<T>)this.Actions.Where(action => action is T);
}
当以下方式使用时:
this.When<OpenDoorAction>()
.Subscribe(a => Debug.Log(a));
以下代码中标记的行引发了以下异常:
无效转换异常:指定的转换无效。
我尝试使用
IGameAction
和其实现者(例如 OpenDoorAction
)的类,但是我不明白为什么需要强制转换为 IObservable<T>
,如果没有它,编译器会说从 IObservable<IGameAction>
到 IObservable<T>
没有隐式转换。 Subject
实现了 IObservable
。顺便说一下,这是在使用 UniRx 的 Unity3D 中。
this.Actions.OfType<IGameAction, T>()
。对于好奇的人来说,.Cast<T>
的作用类似于.Select(a => (T)a)
,这也是解决问题的一种“方案”。谢谢! - altschuler