c# - 如何将抽象类转换为T类型?

标签 c#

我有一个抽象类:

abstract class A {
    // some stuff
    float val = 0;
    abstract float Foo();
}

class B1 : A {
    override float Foo() {
        Console.WriteLine("B1: " + val);
    }
}

class B2 : A {
    override float Foo() {
        Console.WriteLine("B2: " + val);
    }
}

我有一个List<A> a我想获得给定类型 T 的第一个项目:

public T GetTypeFromList<T>() {
    foreach (var item in a) {
        T tmp = item as T; // doesn't compile
        if (tmp != null)
            return tmp;
    }
    throw new Exception("Type isn't in list.");
}

有办法吗?
编辑:
它显示:类型参数“T”不能与“as”运算符一起使用 因为它没有类类型约束,也没有“类” 约束

最佳答案

不要使用as来检查类型。使用 is 代替:

if (item is T)
    return (T)item;

Here msdn中有关于类型转换的详细解释。

关于c# - 如何将抽象类转换为T类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59512444/

相关文章:

c# - IQueryable 与 Linq 表达式导致 NullReferenceException

c# - 在netcf C#中播放铃声期间振动

c# - 在调试期间在 Visual Studio 中自动附加到子进程

c# - 解码引用可打印正确

c# - 在 ASP.NET Core 3.1 中上传和下载大文件?

c# - 解析附加到 PDF 文件末尾的 XMP XML 元数据的正确方法?

c# - 在 Crystal 报表中以大写形式显示字段值

特定类的 C# AttributeUsage

c# - "else if"比 "switch() case"快吗?

c# - 业务对象和数据层