反変インターフェースに問題があり、それを解決する最善の方法がわかりません。これらは私のクラスです:
public interface IObject {
}
public interface IBigObject : IObject {
}
public interface ISmallObject : IObject {
}
public class AnObject : IBigObject {
}
public class DataWrapper<T> {
public T Data { get; set; }
}
DataWrapper<IObject>
(派生クラスの数である可能性があります)を渡し、アイテムを として取得できるようにしたいのですIObject
が、これを行うことができる唯一の方法は次のとおりです。
IObject itemToAdd = null;
if (values[1] is IObject) {
itemToAdd = values[1] as IObject;
} else if (values[1] is DataWrapper<IObject>) {
itemToAdd = ((DataWrapper<IObject>)values[1]).Data;
} else if (values[1] is DataWrapper<IBigObject>) {
itemToAdd = ((DataWrapper<IBigObject>)values[1]).Data;
} else if (values[1] is DataWrapper<BigObjectBase>) {
itemToAdd = ((DataWrapper<ObservableBigObject>)values[1]).Data;
} else if (values[1] is DataWrapper<ObservableBigObject>) {
itemToAdd = ((DataWrapper<ObservableBigObject>)values[1]).Data;
}
もっと短い方法はありますか?