2017-02-08 15 views
1
System.Type type = Type.GetType("something"); 

System.Typeにはメンバー 'IsNamespace'がありません。そのタイプが名前空間を参照しているかどうかをどのように判断しますか?C#System.Typeは名前空間ですか?

タイプ"something"はコンパイル時には分かりません。

+0

Type.IsNamespace(object)を使用できます。以下を参照してください。https://msdn.microsoft.com/en-us/library/bb383760.aspx?f=255&MSPPError=-2147217396 – meganaut

+3

@meganaut thats for asp.net ajax。 –

答えて

3

名前空間Typeオブジェクトで表すことができないので、それは何の部材「IsNamespace」を持っていません。次の行は、コンパイルに失敗します。

typeof(System.Linq); 

だから、あなたがそのない名前空間を知っている、あなたはTypeオブジェクトを持っていると仮定します。そのような文字列では、それがちょうど名前空間であればGetTypeを投げるべきです。

3

Type sは名前空間を参照していません。これは型を参照しています。型には、それらの名前空間を表すプロパティがあります。

アセンブリ/ appdomain内のすべての型を列挙し、一意の名前空間を収集/キャッシュできます。

HashSet<string> allNamespaces = new HashSet<string>(
    AppDomain.CurrentDomain.GetAssemblies() 
     .SelectMany(s => s.GetTypes()) 
     .Select(t => t.Namespace) 
    ); 

bool isNamespace = allNamespaces.Contains("foo"); 
+0

私の意図は、実際にはコードで提供されているように任意の文字列を取り、どの文字列を '。' Type.GetType()が正しく動作するように、文字を '+'に置き換える必要があります。だから私のロジックは左から右に解析することでした。私は最初の非名前空間を見つけたときに '+'を入れ替え始めることができました。 – bitwise

+0

あなたはどういうことを言っていますか? –

+0

私はちょうど各 'を交換することができます。それが動作するまで「+」で置き換えてください。しかし、それはパフォーマンス上の厄介なものになります。あなたのソリューションは改善されません。 – bitwise