@@ -27,43 +27,51 @@ public static void Reset()
27
27
/// <param name="t">A generic type definition (<c>t.IsGenericTypeDefinition</c> must be true)</param>
28
28
internal static void Register ( Type t )
29
29
{
30
- if ( null == t . Namespace || null == t . Name )
30
+ lock ( mapping )
31
31
{
32
- return ;
33
- }
32
+ if ( null == t . Namespace || null == t . Name )
33
+ {
34
+ return ;
35
+ }
34
36
35
- Dictionary < string , List < string > > nsmap ;
36
- if ( ! mapping . TryGetValue ( t . Namespace , out nsmap ) )
37
- {
38
- nsmap = new Dictionary < string , List < string > > ( ) ;
39
- mapping [ t . Namespace ] = nsmap ;
40
- }
41
- string basename = GetBasename ( t . Name ) ;
42
- List < string > gnames ;
43
- if ( ! nsmap . TryGetValue ( basename , out gnames ) )
44
- {
45
- gnames = new List < string > ( ) ;
46
- nsmap [ basename ] = gnames ;
37
+ Dictionary < string , List < string > > nsmap ;
38
+ if ( ! mapping . TryGetValue ( t . Namespace , out nsmap ) )
39
+ {
40
+ nsmap = new Dictionary < string , List < string > > ( ) ;
41
+ mapping [ t . Namespace ] = nsmap ;
42
+ }
43
+
44
+ string basename = GetBasename ( t . Name ) ;
45
+ List < string > gnames ;
46
+ if ( ! nsmap . TryGetValue ( basename , out gnames ) )
47
+ {
48
+ gnames = new List < string > ( ) ;
49
+ nsmap [ basename ] = gnames ;
50
+ }
51
+
52
+ gnames . Add ( t . Name ) ;
47
53
}
48
- gnames . Add ( t . Name ) ;
49
54
}
50
55
51
56
/// <summary>
52
57
/// xxx
53
58
/// </summary>
54
59
public static List < string > GetGenericBaseNames ( string ns )
55
60
{
56
- Dictionary < string , List < string > > nsmap ;
57
- if ( ! mapping . TryGetValue ( ns , out nsmap ) )
61
+ lock ( mapping )
58
62
{
59
- return null ;
60
- }
61
- var names = new List < string > ( ) ;
62
- foreach ( string key in nsmap . Keys )
63
- {
64
- names . Add ( key ) ;
63
+ Dictionary < string , List < string > > nsmap ;
64
+ if ( ! mapping . TryGetValue ( ns , out nsmap ) )
65
+ {
66
+ return null ;
67
+ }
68
+ var names = new List < string > ( ) ;
69
+ foreach ( string key in nsmap . Keys )
70
+ {
71
+ names . Add ( key ) ;
72
+ }
73
+ return names ;
65
74
}
66
- return names ;
67
75
}
68
76
69
77
/// <summary>
@@ -79,47 +87,55 @@ public static Type GenericForType(Type t, int paramCount)
79
87
/// </summary>
80
88
public static Type GenericByName ( string ns , string basename , int paramCount )
81
89
{
82
- Dictionary < string , List < string > > nsmap ;
83
- if ( ! mapping . TryGetValue ( ns , out nsmap ) )
90
+ lock ( mapping )
84
91
{
85
- return null ;
86
- }
92
+ Dictionary < string , List < string > > nsmap ;
93
+ if ( ! mapping . TryGetValue ( ns , out nsmap ) )
94
+ {
95
+ return null ;
96
+ }
87
97
88
- List < string > names ;
89
- if ( ! nsmap . TryGetValue ( GetBasename ( basename ) , out names ) )
90
- {
91
- return null ;
92
- }
98
+ List < string > names ;
99
+ if ( ! nsmap . TryGetValue ( GetBasename ( basename ) , out names ) )
100
+ {
101
+ return null ;
102
+ }
93
103
94
- foreach ( string name in names )
95
- {
96
- string qname = ns + "." + name ;
97
- Type o = AssemblyManager . LookupTypes ( qname ) . FirstOrDefault ( ) ;
98
- if ( o != null && o . GetGenericArguments ( ) . Length == paramCount )
104
+ foreach ( string name in names )
99
105
{
100
- return o ;
106
+ string qname = ns + "." + name ;
107
+ Type o = AssemblyManager . LookupTypes ( qname ) . FirstOrDefault ( ) ;
108
+ if ( o != null && o . GetGenericArguments ( ) . Length == paramCount )
109
+ {
110
+ return o ;
111
+ }
101
112
}
102
- }
103
113
104
- return null ;
114
+ return null ;
115
+ }
105
116
}
106
117
107
118
/// <summary>
108
119
/// xxx
109
120
/// </summary>
110
121
public static string GenericNameForBaseName ( string ns , string name )
111
122
{
112
- Dictionary < string , List < string > > nsmap ;
113
- if ( ! mapping . TryGetValue ( ns , out nsmap ) )
123
+ lock ( mapping )
114
124
{
115
- return null ;
116
- }
117
- List < string > gnames ;
118
- nsmap . TryGetValue ( name , out gnames ) ;
119
- if ( gnames ? . Count > 0 )
120
- {
121
- return gnames [ 0 ] ;
125
+ Dictionary < string , List < string > > nsmap ;
126
+ if ( ! mapping . TryGetValue ( ns , out nsmap ) )
127
+ {
128
+ return null ;
129
+ }
130
+
131
+ List < string > gnames ;
132
+ nsmap . TryGetValue ( name , out gnames ) ;
133
+ if ( gnames ? . Count > 0 )
134
+ {
135
+ return gnames [ 0 ] ;
136
+ }
122
137
}
138
+
123
139
return null ;
124
140
}
125
141
0 commit comments