接收和返回泛型类型的方法 - 怎么做?

时间:2016-06-21 14:12:13

标签: c# generics

我有一个包含一些样本的班级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));
    }
}

1 个答案:

答案 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>());
}