gpt4 book ai didi

c# - 你能找到一个接受 2 个通用类型但不管这些类型的对象吗?

转载 作者:行者123 更新时间:2023-11-30 17:26:35 25 4
gpt4 key购买 nike

奇怪的标题,我知道。

基本上,如果你有一个类,例如:

public class SomeClass<T1, T2> : MonoBehaviour {}

有没有办法做这样的事情,FindObjectsOfType<SomeClass<>>() ,并检索所有现有的 SomeClass不管T1和T2?

最佳答案

不,不直接。

但是你可以使用一个小技巧:为它创建一个非泛型基类

public abstract class SomeBase : MonoBehaviour { }

public class SomeClass<T1, T2> : SomeBase { }

现在你可以简单地使用

SomeBase[] instances = FindObjectsOfType<SomeBase>();

然而,这只会返回 SomeBase 类型,您将无法访问 SomeClass 的内部内容。访问例如就足够了transformgameObject

您可以添加一些抽象 属性,以便稍后能够将它们转换为正确的类型:

public abstract class SomeBase : MonoBehaviour
{
public abstract Type GetT1 { get; }
public abstract Type GetT2 { get; }
}

public class SomeClass<T1, T2> : SomeBase
{
public override Type GetT1
{
get { return typeof(T1); }
}

public override Type GetT2
{
get { return typeof(T2); }
}
}

现在你可以简单地做例如

var test = FindObjectsOfType<SomeBase>();
foreach (var someClass in test)
{
Debug.LogFormat("Instance found on {0}: T1={1}, T2={2}", someClass.name, someClass.GetT1.Name, someClass.GetT2.Name);
}

要进一步将项目类型转换为目标 SomeClass 我认为您需要使用反射。有一些例子,例如How to cast a generic type at runtime in c#Cast generic type without knowing T?

关于c# - 你能找到一个接受 2 个通用类型但不管这些类型的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56287029/

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