将类型传递给方法(没有通用)(C#语法)

时间:2014-04-29 18:26:44

标签: c# generics methods

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

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());
}

我尝试传递Generics,但JSON不喜欢Generics的方法。我觉得我很快就用typeof搞清楚了,但我似乎无法找到语法。

编辑:临时变量包含覆盖ToString(),因此我不能简单地outObject

2 个答案:

答案 0 :(得分:3)

如果database.retrieve是通用方法,那么最好的方法是使方法本身通用:

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

由于它是out参数,因此您实际上并不需要实例化临时参数。如果它是非泛型的,并且需要object,则只需使用object:

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

答案 1 :(得分:0)

你可以尝试这样的事情。但是这个例子假设你的类型有无参数构造函数。如果您使用.NET&lt; 4.0将dynamic更改为Object

    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());
        }
    }