1

私はSilverlightを使用するWindowsPhone7アプリケーションに取り組んでいます。私が探しているのは、作成したい正しいクラスの名前を含む文字列を指定して、クラスの新しいインスタンスを作成することです。以下は私が参照しているコードの概要であり、それを使用して新しいインスタンスを作成しようとしています。デバッグから、serviceClassに正しい文字列が含まれていることがわかり、それに「.cs」を追加すると、所有しているクラスの1つに直接対応するようになります。なぜ作成されないのですか?

WebViewService foundService; //From above
....
....
services.TryGetValue(mode, out foundService); //Find service
if (foundService == null)
   {
            string serviceClass;
            serviceRegistry.TryGetValue(mode, out serviceClass); //Find serviceClass
            if (serviceClass != null) //create new web service if one is found
            {
                try
                {
                    //TODO: This is not working properly, should create an instance of some child class of WebViewService
                     foundService = (WebViewService)System.Activator.CreateInstance(Type.GetType(serviceClass+".cs"));
                     services.Add(mode, foundService);
                }
                catch
                {
                    //But instead it always ends up here with ArgumentNullExeption
                }
            }
        }
        return foundService;
    }

少しでも助けや提案をいただければ幸いです。御時間ありがとうございます!

4

3 に答える 3

2

「.cs」の部分を除いて、クラスのフルネーム(名前空間を含む)を使用してみてください。例えば:YourApp.Services.YourWebViewService

于 2012-05-04T23:32:43.563 に答える
2

文字列に完全修飾型名が含まれている場合は、インスタンスを作成できます。

于 2012-05-04T23:32:49.600 に答える
1

Type.GetTypeファイル名の文字列を取りません。クラス名または構造体名を取ります。

于 2012-05-04T23:31:22.113 に答える