gpt4 book ai didi

c# - 为什么 GetType().BaseClass 找不到基类?

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:32 24 4
gpt4 key购买 nike

编辑:这是我的错,因为还有另一个 Foo潜伏的定义让我对Foo<>感到困惑定义。

在下面的代码中,FooBar 的基类对吧?

那为什么编译器会在 .BaseType 下划线呢?部分并说“给定的表达式永远不是提供的 (Form1.Foo) 类型”?

    // has 1 virtual method
class Foo<T> : IList<T>
{
...
}

// overrides 1 method from Foo
class Bar : Foo<float>
{

}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
object o = new Bar();


if (o is Bar)
{
Console.WriteLine("2222222 "+ o.GetType().BaseType);
if(o.GetType().BaseType is Foo)
{
Console.WriteLine("2.5 2.5 2.5 2.5 2.5");
}
}
if (o is object)
Console.WriteLine("3333333");
}

输出是:

2222222 VRAM.Form1+Foo`1[System.Single]
3333333

我正在尝试检查 object分配给派生自 Foo 的实例或不。因为在运行时,该对象将是原始数组或 Foo<float>。或 Foo<int>或其他T原始类型。

同时使用 typeof(Foo<>)比较不起作用。我只需要对对象 o 是否派生自 Foo<> 进行 1 深度检查。或不。 (我不想检查像 Bar Biz Baz 这样的所有类型,它们是 integer double char 类型,以后会添加很多,所以我最多需要检查 1 行或 2 行)

最佳答案

o.GetType().BaseType 返回 Type,不是您可以使用 isas 检查的实例>.

更好的表示法是:

if(o.GetType().BaseType.GetGenericTypeDefinition() == typeof(Foo<>))

如果你想检查类型是否相等。一般来说,最好使用 Type.IsAssignableFrom .

关于c# - 为什么 GetType().BaseClass 找不到基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42980119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com