sja*_*anz 2 c# generics methods casting
我有一个包含特殊集合的泛型类.此集合的一个实例作为对象传递给方法.现在我必须调用泛型类的方法之一.我看到的问题是我不知道集合中的项目是哪种类型,所以我在使用该属性之前无法进行转换.
public class MyGenericCollection<T>: ReadOnlyObservableCollection<T>
{
  public bool MyProperty
  {
    get
    {
      // do some stuff and return
    }
  }
}
public bool ProblematicMethod(object argument)
{
  MyGenericCollection impossibleCast = (MyGenericCollection) argument;
  return impossibleCast.MyProperty;
}
有没有解决这个问题的方法?
在这种情况下,可能值得添加包含所有非通用成员的接口:
public IHasMyProperty
{
    bool MyProperty { get; }
}
然后让集合实现它:
public class MyGenericCollection<T>: ReadOnlyObservableCollection<T>,
    IHasMyProperty
然后采取IHasMyProperty你的方法:
public bool ProblematicMethod(IHasMyProperty argument)
{
    return argument.MyProperty;
}
或继续采取object,但铸造到界面:
public bool ProblematicMethod(object argument)
{
    return ((IHasMyProperty)argument).MyProperty;
}
在其他情况下,您可以使用泛型类扩展的非泛型抽象基类,但在这种情况下,您已经从通用类(ReadOnlyObservableCollection<T>)中派生,该类删除了该选项.
| 归档时间: | 
 | 
| 查看次数: | 337 次 | 
| 最近记录: |