Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo ResourceManager.GetObject (String)

 

Data di pubblicazione: ottobre 2016

Restituisce il valore della risorsa non di tipo stringa specificata.

Spazio dei nomi:   System.Resources
Assembly:  mscorlib (in mscorlib.dll)

public virtual object GetObject(
	string name
)

Parametri

name
Type: System.String

Nome della risorsa da ottenere.

Valore restituito

Type: System.Object

Valore della risorsa localizzata per le impostazioni cultura correnti del chiamante. Se un set di risorse appropriato esiste ma non è possibile trovare l'elemento name, il metodo restituisce null.

Exception Condition
ArgumentNullException

Il valore del parametro name è null.

MissingManifestResourceException

Non è stato trovato alcun set di risorse localizzate utilizzabili e non sono presenti risorse delle impostazioni cultura predefinite. Per informazioni su come gestire questa eccezione, vedere la sezione "Gestione di eccezioni MissingManifestResourceException e MissingSatelliteAssemblyException" il ResourceManager argomento relativo alla classe.

MissingSatelliteAssemblyException

Risorse della lingua predefinita risiedono in un assembly satellite che non è stato trovato. Per informazioni su come gestire questa eccezione, vedere la sezione "Gestione di eccezioni MissingManifestResourceException e MissingSatelliteAssemblyException" il ResourceManager argomento relativo alla classe.

Il GetObject metodo viene utilizzato per recuperare le risorse non di tipo stringa. Inclusi i valori che appartengono a tipi di dati primitivi, ad esempio Int32 o Double, bitmap (ad esempio un System.Drawing.Bitmap oggetto), o di oggetti serializzati personalizzato. In genere, l'oggetto restituito deve essere eseguito il cast (in c#) o convertire (in Visual Basic) a un oggetto del tipo appropriato.

La risorsa restituita è localizzata per le impostazioni cultura dell'interfaccia utente del thread corrente, che viene definito il CultureInfo.CurrentUICulture proprietà. Se la risorsa non è localizzata per le impostazioni cultura, il gestore di risorse utilizza le regole di fallback per caricare una risorsa appropriata. Se non viene trovato alcun set di risorse localizzate utilizzabile, il ResourceManager ricorre risorse della lingua predefinita. Se non viene trovata una set di risorse per la lingua predefinita, il metodo genera un MissingManifestResourceException eccezione oppure, se il set di risorse si trovano in un assembly satellite, è previsto un MissingSatelliteAssemblyException (eccezione). Se il gestore di risorse è possibile caricare una risorsa appropriata impostato ma Impossibile trovare una risorsa denominata name, il metodo restituisce null.

Il IgnoreCase proprietà determina se il confronto di name con i nomi delle risorse è tra maiuscole e minuscole (predefinito) o tra maiuscole e minuscole.

System_CAPS_cautionAttenzione

Questo metodo può generare più eccezioni rispetto a quelle elencate. Questa situazione può verificarsi uno dei motivi è se un metodo che chiama questo metodo genera un'eccezione. Ad esempio, un FileLoadException eccezione potrebbe essere generata se un errore durante la distribuzione o installazione di un assembly satellite, o un SerializationException eccezione potrebbe essere generata se un tipo definito dall'utente genera un'eccezione definita dall'utente quando il tipo viene deserializzato.

Se si chiama il GetObject metodo più volte con lo stesso name parametro, non basarsi sul metodo restituisce un riferimento allo stesso oggetto a ogni chiamata. In questo modo il GetObject metodo può restituire un riferimento a un oggetto risorsa esistente in una cache oppure è possibile ricaricare la risorsa e restituiscono un riferimento a un nuovo oggetto risorsa.

Nell'esempio seguente viene utilizzata la GetObject(String) metodo per deserializzare un oggetto personalizzato. L'esempio include un file di codice sorgente denominato UIElements.cs (UIElements se si utilizza Visual Basic) che definisce la seguente struttura denominata PersonTable. Questa struttura deve essere utilizzato da una routine di visualizzazione tabella generale che consente di visualizzare i nomi localizzati delle colonne della tabella. Si noti che il PersonTable struttura è contrassegnata con il SerializableAttribute attributo.

using System;

[Serializable] public struct PersonTable
{
   public readonly int nColumns;
   public readonly string column1; 
   public readonly string column2;
   public readonly string column3; 
   public readonly int width1;
   public readonly int width2;
   public readonly int width3;

   public PersonTable(string column1, string column2, string column3,
                  int width1, int width2, int width3)
   {
      this.column1 = column1;
      this.column2 = column2;
      this.column3 = column3;
      this.width1 = width1;
      this.width2 = width2;
      this.width3 = width3;
      this.nColumns = typeof(PersonTable).GetFields().Length / 2; 
   }
}

Il codice riportato di seguito da un file denominato CreateResources.cs (CreateResources. vb per Visual Basic) consente di creare un file di risorse XML denominato UIResources.resx che archivia un titolo e un PersonTable oggetto che contiene informazioni per un'applicazione localizzata per la lingua inglese.

using System;
using System.Resources;

public class CreateResource
{
   public static void Main()
   {
      PersonTable table = new PersonTable("Name", "Employee Number", 
                                          "Age", 30, 18, 5);
      ResXResourceWriter rr = new ResXResourceWriter(@".\UIResources.resx");
      rr.AddResource("TableName", "Employees of Acme Corporation");
      rr.AddResource("Employees", table);
      rr.Generate();
      rr.Close();
   }
}

Il codice seguente nel file di codice sorgente denominato GetObject.cs (GetObject.vb), quindi recupera le risorse e li visualizza nella console.

using System;
using System.Resources;

[assembly: NeutralResourcesLanguageAttribute("en")]

public class Example
{
   public static void Main()
   {
      string fmtString = String.Empty;
      ResourceManager rm = new ResourceManager("UIResources", typeof(Example).Assembly);       
      string title = rm.GetString("TableName");
      PersonTable tableInfo = (PersonTable) rm.GetObject("Employees");

      if (! String.IsNullOrEmpty(title)) {
         fmtString = "{0," + ((Console.WindowWidth + title.Length) / 2).ToString() + "}"; 
         Console.WriteLine(fmtString, title);      
         Console.WriteLine();
      }

      for (int ctr = 1; ctr <= tableInfo.nColumns; ctr++) {
         string columnName = "column"  + ctr.ToString();
         string widthName = "width" + ctr.ToString();
         string value = tableInfo.GetType().GetField(columnName).GetValue(tableInfo).ToString();
         int width = (int) tableInfo.GetType().GetField(widthName).GetValue(tableInfo);
         fmtString = "{0,-" + width.ToString() + "}";
         Console.Write(fmtString, value);
      }      
      Console.WriteLine();
   }
}

È possibile compilare i file di risorse necessari e gli assembly ed eseguire l'app eseguendo il seguente file batch. È necessario utilizzare il /r per fornire un riferimento a UIElements.dll Resgen.exe in modo che è possibile accedere alle informazioni sull'opzione di PersonTable struttura. Se si utilizza c#, sostituire il vbc nome del compilatore con csc, e sostituire il .vb estensione con .cs.


vbc /t:library UIElements.vb
vbc CreateResources.vb /r:UIElements.dll
CreateResources

resgen UIResources.resx  /r:UIElements.dll
vbc GetObject.vb /r:UIElements.dll /resource:UIResources.resources

GetObject.exe

ReflectionPermission

when invoked late-bound through mechanisms such as M:System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]). Associated enumeration: F:System.Security.Permissions.ReflectionPermissionFlag.MemberAccess.

.NET Framework
Disponibile da 1.1
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Torna all'inizio
Mostra: