[英]Method receiving and returning generic type - how to do it?
我有一个包含一些样本的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));
}
}
您不需要为此使用方法参数 ,但需要一个通用参数 :
//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>());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.