2

「BlueprintsManager.WorkingStandardBlueprint」や、それらのインスタンスを持つ ArrayList などのネストされたクラスはほとんどありません。それらをパラメーターとしてメソッドに渡したいと思います。

private void ShowBlueprints(string class_str, ArrayList class_array)
{
    // class_str would be passed as "BlueprintsManager.WorkingStandardBlueprint"
    // how here I can access class_str as a class and cast class_array to it, to access some variables.
    // for example, I need to access some BlueprintsManager.WorkingStandardBlueprint public variables.
}

リフレクション、ジェネリックをいじっていましたが、まだ機能しません。

ありがとうございました。

4

3 に答える 3

1

これにはジェネリックを使用する必要があります。

private void ShowBlueprints<T>(List<T> class_array)
{
    for (BlueprintsManager.WorkingStandardBlueprint item in class_array)
    {
        if(typeof T is BlueprintsManager.WorkingStandardBlueprint)
        {
            Console.WriteLine(((BlueprintsManager.WorkingStandardBlueprint)item).whateverpropertyyouhavedefined);
        }
    }
}

これで、次のようにメソッドを呼び出すことができます。

ShowBluePrints<BlueprintsManager.WorkingStandardBlueprint>(myblueprints);

編集コメントでは、OPはすべてのプロパティが同じであると言います。この解決策はうまくいきます:

class BaseClass
{
    string Name {get; set;}
    int id {get; set;}
}

class BlueprintsManager
{
    class WorkingStandardBlueprint : BaseClass
    {

    }
}

private void ShowBlueprints<T>(List<T> class_array) where T : BaseClass
{
    for (T item in class_array)
    {       
        Console.WriteLine(item.Name);
    }
}
于 2013-04-20T23:51:49.990 に答える