SortVersion Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit des informations sur la version Unicode utilisée pour comparer et trier des chaînes.
public ref class SortVersion sealed : IEquatable<System::Globalization::SortVersion ^>
public sealed class SortVersion : IEquatable<System.Globalization.SortVersion>
[System.Serializable]
public sealed class SortVersion : IEquatable<System.Globalization.SortVersion>
type SortVersion = class
interface IEquatable<SortVersion>
[<System.Serializable>]
type SortVersion = class
interface IEquatable<SortVersion>
Public NotInheritable Class SortVersion
Implements IEquatable(Of SortVersion)
- Héritage
-
SortVersion
- Attributs
- Implémente
Exemples
L’exemple suivant contient une partie du code source d’une application qui utilise la SortVersion classe pour s’assurer que les noms natifs des RegionInfo objets sont ordonnés de manière appropriée pour le système actuel et la culture actuelle. Il utilise les BinaryReader objets et BinaryWriter pour stocker et récupérer des données triées à partir d’un fichier de données nommé Regions.dat
plutôt que de récupérer et de classer les données chaque fois que l’application est exécutée. L’exemple vérifie d’abord si le fichier de données existe. Si ce n’est pas le cas, il crée les données et définit l’indicateur reindex
, ce qui indique que les données doivent être à nouveau traitées et enregistrées. Sinon, il récupère les données et compare l’objet enregistré SortVersion à l’objet pour la SortVersion culture actuelle sur le système actuel. S’ils ne sont pas égaux ou si l’indicateur reindex
a été défini précédemment, il recourt aux RegionInfo données.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
public class Example : IComparer
{
private const string FILENAME = @".\Regions.dat";
private struct Region
{
internal Region(string id, string name)
{
this.Id = id;
this.NativeName = name;
}
public string Id;
public string NativeName;
public override string ToString()
{
return this.NativeName;
}
}
public static void Main()
{
bool reindex = false;
Region[] regions;
SortVersion ver = null;
// If the data has not been saved, create it.
if (! File.Exists(FILENAME)) {
regions = GenerateData();
ver = CultureInfo.CurrentCulture.CompareInfo.Version;
reindex = true;
}
// Retrieve the existing data.
else {
regions = RestoreData(out ver);
}
// Determine whether the current ordering is valid; if not, reorder.
if (reindex || ver != CultureInfo.CurrentCulture.CompareInfo.Version) {
Array.Sort(regions, new Example());
// Save newly reordered data.
SaveData(regions);
}
// Continue with application...
}
private static Region[] GenerateData()
{
List<Region> regions = new List<Region>();
foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures)) {
if (culture.IsNeutralCulture | culture.Equals(CultureInfo.InvariantCulture))
continue;
RegionInfo region = new RegionInfo(culture.Name);
regions.Add(new Region(region.Name, region.NativeName));
}
return regions.ToArray();
}
private static Region[] RestoreData(out SortVersion ver)
{
List<Region> regions = new List<Region>();
BinaryReader rdr = new BinaryReader(File.Open(FILENAME, FileMode.Open));
int sortVer = rdr.ReadInt32();
Guid sortId = Guid.Parse(rdr.ReadString());
ver = new SortVersion(sortVer, sortId);
string id, name;
while (rdr.PeekChar() != -1) {
id = rdr.ReadString();
name = rdr.ReadString();
regions.Add(new Region(id, name));
}
return regions.ToArray();
}
private static void SaveData(Region[] regions)
{
SortVersion ver = CultureInfo.CurrentCulture.CompareInfo.Version;
BinaryWriter wrtr = new BinaryWriter(File.Open(FILENAME, FileMode.Create));
wrtr.Write(ver.FullVersion);
wrtr.Write(ver.SortId.ToString());
foreach (var region in regions) {
wrtr.Write(region.Id);
wrtr.Write(region.NativeName);
}
wrtr.Close();
}
public int Compare(object o1, object o2)
{
// Assume that all casts succeed.
Region r1 = (Region) o1;
Region r2 = (Region) o2;
return String.Compare(r1.NativeName, r2.NativeName,
StringComparison.CurrentCulture);
}
}
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.IO
Imports System.Text
Public Class Example : Implements IComparer
Private Const FILENAME As String = ".\Regions.dat"
Private Structure Region
Friend Sub New(id As String, name As String)
Me.Id = id
Me.NativeName = name
End Sub
Dim Id As String
Dim NativeName As String
Public Overrides Function ToString() As String
Return Me.NativeName
End Function
End Structure
Public Shared Sub Main()
Dim reindex As Boolean = False
Dim regions() As Region
Dim ver As SortVersion = Nothing
' If the data has not been saved, create it.
If Not File.Exists(FILENAME) Then
regions = GenerateData()
ver = CultureInfo.CurrentCulture.CompareInfo.Version
reindex = True
' Retrieve the existing data.
Else
regions = RestoreData(ver)
End If
' Determine whether the current ordering is valid; if not, reorder.
If reindex OrElse ver <> CultureInfo.CurrentCulture.CompareInfo.Version Then
Array.Sort(regions, New Example())
' Save newly reordered data.
SaveData(regions)
End If
' Continue with application...
End Sub
Private Shared Function GenerateData() As Region()
Dim regions As New List(Of Region)()
For Each culture In CultureInfo.GetCultures(CultureTypes.AllCultures)
If culture.IsNeutralCulture Or culture.Equals(CultureInfo.InvariantCulture) Then Continue For
Dim region As New RegionInfo(culture.Name)
regions.Add(New Region(region.Name, region.NativeName))
Next
Return regions.ToArray()
End Function
Private Shared Function RestoreData(ByRef ver As SortVersion) As Region()
Dim regions As New List(Of Region)
Dim rdr As New BinaryReader(File.Open(FILENAME, FileMode.Open))
Dim sortVer As Integer = rdr.ReadInt32
Dim sortId As Guid = Guid.Parse(rdr.ReadString())
ver = New SortVersion(sortVer, sortId)
Dim id As String, name As String
Do While rdr.PeekChar <> -1
id = rdr.ReadString()
name = rdr.ReadString()
regions.Add(New Region(id, name))
Loop
Return regions.ToArray()
End Function
Private Shared Sub SaveData(regions As Region())
Dim ver As SortVersion = CultureInfo.CurrentCulture.CompareInfo.Version
Dim wrtr As New BinaryWriter(File.Open(FILENAME, FileMode.Create))
wrtr.Write(ver.FullVersion)
wrtr.Write(ver.SortId.ToString())
For Each region In regions
wrtr.Write(region.Id)
wrtr.Write(region.NativeName)
Next
wrtr.Close()
End Sub
Private Function SortByNativeName(o1 As Object, o2 As Object) As Integer _
Implements IComparer.Compare
' Assume that all conversions succeed.
Dim r1 As Region = CType(o1, Region)
Dim r2 As Region = CType(o2, Region)
Return String.Compare(r1.NativeName, r2.NativeName,
StringComparison.CurrentCulture)
End Function
End Class
Remarques
Pour plus d’informations sur cette API, consultez Remarques supplémentaires sur l’API pour SortVersion.
Constructeurs
SortVersion(Int32, Guid) |
Crée une instance de la classe SortVersion. |
Propriétés
FullVersion |
Obtient le numéro de version complet de l’objet SortVersion. |
SortId |
Obtient un identificateur global unique pour cet objet SortVersion. |
Méthodes
Equals(Object) |
Retourne une valeur indiquant si cette instance SortVersion équivaut à un objet spécifié. |
Equals(SortVersion) |
Retourne une valeur indiquant si cette instance SortVersion équivaut à un objet SortVersion spécifié. |
GetHashCode() |
Retourne un code de hachage pour cette instance. |
GetType() |
Obtient le Type de l'instance actuelle. (Hérité de Object) |
MemberwiseClone() |
Crée une copie superficielle du Object actuel. (Hérité de Object) |
ToString() |
Retourne une chaîne qui représente l'objet actuel. (Hérité de Object) |
Opérateurs
Equality(SortVersion, SortVersion) |
Indique si deux instances de SortVersion sont égales. |
Inequality(SortVersion, SortVersion) |
Indique si deux instances de SortVersion ne sont pas égales. |