将类型传递给方法(不带泛型)(C#语法)

本文关键字:泛型 类型 语法 方法 | 更新日期: 2023-09-27 18:01:01

我一直在寻找一种在构建数据库管理器时创建临时变量的方法。

public void Read(string name, string info, Type type){
    // blah temp = "Create temporary variable of type above"
    database.retrieve(name, info, out temp);
    Debug.Log (temp.ToString());
}

我尝试传递泛型,但JSON不喜欢使用泛型的方法。我觉得我快要用typeof弄清楚了,但我似乎找不到语法。

编辑:临时变量包含一个重写的ToString(),所以我不能简单地将out转换为和Object

将类型传递给方法(不带泛型)(C#语法)

如果database.retrieve是一个通用方法,最好的选择是使该方法本身通用:

public void Read<T>(string name, string info)
{
     T temp;
     database.retrieve(name, info, out temp);
     // ...
}

由于它是一个out参数,所以实际上不需要实例化一个临时的。如果它是非泛型的,并且采用object,那么只需使用对象:

public void Read(string name, string info, Type type)
{
     object temp;
     database.retrieve(name, info, out temp);
     // ...
}

您可以尝试这样的方法。但本例假设您的类型具有无参数构造函数。如果您使用.NET<4.0将CCD_ 8更改为CCD_。

    public void Read(string name, string info, Type type)
    {
        ConstructorInfo ctor = type.GetConstructor(System.Type.EmptyTypes);
        if (ctor != null)
        {
            dynamic temp = ctor.Invoke(null);
            database.retrieve(name, info, out temp);
            Debug.Log(temp.ToString());
        }
    }