我正在构建一个Vector<T>
类,并且我在使用Add
方法时遇到了不同的问题。我已经拥有的界面使得添加成为可能,但前提是我知道T
实现了IAddable<TIn, TOut>
。
interface IAddable<TIn, TOut>
{
Vector<TOut> Add(Vector<TIn>)
}
partial Vector<T> where T : IAddable<T, T>
{
public Vector<T> Add(Vector<T> v)
{
return mapIndexed((index, x) => this[index].Add(v[index]));
}
}
关键是,我希望能够为实现Vector<T>
的每个Vector<TIn>
向Vector<TOut>
添加T
和IAddable<TIn, TOut>
。我的解决方案显然无法正常工作,因为您无法拨打this[index].Add(v[index])
。有没有办法在不遇到这类问题的情况下调用它?
partial Vector<T>
{
public Vector<TOut> Add<TIn, TOut>(Vector<TIn> v)
{
if (typeof(T).IsAssignableFrom(typeof(IAddable<TIn, TOut>)))
return mapIndexed((index, x) => this[index].Add(v[index]));
return null;
}
}
答案 0 :(得分:0)
If T.GetInterface("IAddable<TIn, TOut>") != null { /* Use in vector... */ }
答案 1 :(得分:0)
实际上,这里不需要控制。
仅当Vector<T>
来自Vector<T2>
T2
添加T
public interface IMyVector<T>
{
void AddVector<TIn>(IMyVector<TIn> vector) where TIn : T;
}
public class Vector<T> : IMyVector<T>
{
public void AddVector<TIn>(IMyVector<TIn> vector) where TIn : T
{
// Your logic here
}
}
public class Base {}
public class Derived : Base {}
测试类:
public class Tests
{
public void Test()
{
IMyVector<Base> baseVector= null;
IMyVector<Derived> derivedVector= null;
baseVector.AddVector(derivedVector);
}
}