创建数组类对象

时间:2014-11-05 01:53:48

标签: c# arrays unity3d code-translation

我想做一些我以前在Java中做过的事情,但需要在C#中做。

Java中的代码类似于:

public Class<? extends Thing>[] classes = new Class<? extends Thing>[3] {
    OneThing.class,
    AnotherThing.class
    YetAnotherThing.class
    // etc.
}

这在C#中是否可以以任何方式实现?最终我要做的是拥有一个表示项目类型的类数组。然后,此数组用于检查项的类型,以生成一个布尔值,表示该项是否具有数组中索引的超类。为了澄清,我正在检查Thing实例的类是否也是OneThingAnotherThing等的实例。

重要的是我正在尝试创建一个不是像Random这样的常规对象的数组,而是创建一个C#与Java Class类相对应的数组。

2 个答案:

答案 0 :(得分:0)

与Java Class<T>在类所代表的类型上是通用的Java不同,C#的System.Type对象根本不是通用的。您可以按如下方式创建它们的数组:

Type[] classes = new[] {
    typeof(OneThing)
,   typeof(AnotherThing)
,   typeof(ThirdThing)
};

但是,编译器无法强制执行类派生的检查或实现特定的基础或接口。但是,您应该可以在没有此限制的情况下执行检查:

var obj = ... // This is your object
var res = classes.Select((t, i) => new {t, i}).FirstOrDefault(p => p.t.IsAssignableFrom(typeof(obj)));
if (res != 0) {
    Console.WriteLine("{0} assignable from {1} is found at {2}.", res.t, typeof(obj), res.i);
} else {
    Console.WriteLine("Type {0} is not found in the array.", typeof(obj));
}

答案 1 :(得分:0)

在c#中我们有System.Type你可以创建它的集合并保留其中所有类的类型。然后,您可以应用您的规则。 {#1}}在c#中用于反射目的。检查c#反射了解更多信息。这是一个简单的代码,展示了您的要求。我试图保持它非常简单,不要混合其他c#概念,以便新来的人更容易理解。

Type