@@ -339,6 +339,24 @@ public CultureInfo(String name, bool useUserOverride) {
339
339
this . m_isInherited = ( this . GetType ( ) != typeof ( System . Globalization . CultureInfo ) ) ;
340
340
}
341
341
342
+ private CultureInfo ( CultureData cultureData )
343
+ {
344
+ Contract . Assert ( cultureData != null ) ;
345
+ m_cultureData = cultureData ;
346
+ m_name = cultureData . CultureName ;
347
+ m_isInherited = false ;
348
+ }
349
+
350
+ private static CultureInfo CreateCultureInfoNoThrow ( string name , bool useUserOverride )
351
+ {
352
+ Contract . Assert ( name != null ) ;
353
+ CultureData cultureData = CultureData . GetCultureData ( name , useUserOverride ) ;
354
+ if ( cultureData == null )
355
+ {
356
+ return null ;
357
+ }
358
+ return new CultureInfo ( cultureData ) ;
359
+ }
342
360
343
361
#if FEATURE_USE_LCID
344
362
public CultureInfo ( int culture ) : this ( culture , true ) {
@@ -922,27 +940,25 @@ public virtual CultureInfo Parent
922
940
923
941
if ( null == m_parent )
924
942
{
925
- try
926
- {
927
- string parentName = this . m_cultureData . SPARENT ;
943
+ string parentName = this . m_cultureData . SPARENT ;
928
944
929
- if ( String . IsNullOrEmpty ( parentName ) )
945
+ if ( String . IsNullOrEmpty ( parentName ) )
946
+ {
947
+ m_parent = InvariantCulture ;
948
+ }
949
+ else
950
+ {
951
+ m_parent = CreateCultureInfoNoThrow ( parentName , m_cultureData . UseUserOverride ) ;
952
+ if ( m_parent == null )
930
953
{
954
+ // For whatever reason our IPARENT or SPARENT wasn't correct, so use invariant
955
+ // We can't allow ourselves to fail. In case of custom cultures the parent of the
956
+ // current custom culture isn't installed.
931
957
m_parent = InvariantCulture ;
932
958
}
933
- else
934
- {
935
- m_parent = new CultureInfo ( parentName , this . m_cultureData . UseUserOverride ) ;
936
- }
937
- }
938
- catch ( ArgumentException )
939
- {
940
- // For whatever reason our IPARENT or SPARENT wasn't correct, so use invariant
941
- // We can't allow ourselves to fail. In case of custom cultures the parent of the
942
- // current custom culture isn't installed.
943
- m_parent = InvariantCulture ;
944
959
}
945
960
}
961
+
946
962
return m_parent ;
947
963
}
948
964
}
0 commit comments