我有一个包含一些样本的班级Frame
。我希望有一个方法AsType
将这些样本转换为另一种数字类型。
我试过这个,但它不起作用,因为The type or namespace 'TargetType' cannot be found
。此外,我有点迷失为什么它没有工作,我怎么能找到正确的方法来思考它并使其正确。
public class Frame<T>
{
public T[] Samples { get; protected set; }
public Frame(IEnumerable<T> Samples)
{
Samples = Samples.ToArray();
}
public Frame<TOut> AsType(Type TOut)
{
// line below doesn't work
return new Frame<TOut>(Samples.Select(s => (TOut)s));
}
}
答案 0 :(得分:4)
您不需要方法参数,而是泛型参数:
//don't miss this parameter!
public Frame<TOut> AsType<TOut>()
{
return new Frame<TOut>(Samples.Select(s => (TOut)s));
}
TOut
是通用参数,因此不需要额外的类型参数。但请注意,您调用此方法的类型必须存在显式转换,否则(TOut)s
将抛出InvalidCastException
。
您可以使用Cast<>
扩展程序更改代码:
public Frame<TOut> AsType<TOut>()
{
return new Frame<TOut>(Samples.Cast<TOut>());
}