2010-05-27 5 views
7

मैं स्ट्रिंग के दूसरे पैरामीटर को पूरी तरह से समझ नहीं पाता हूं। और यह इसलिए है क्योंकि मुझे कोई उदाहरण नहीं मिल रहा है जब यह वास्तव में एक फर्क पड़ता है। उदाहरण के लिए, उदाहरण यहाँ दिया ही है, दूसरा पैरामीटर (IgnoreCase को छोड़ कर) के मूल्य की परवाह किए बिना: http://msdn.microsoft.com/en-us/library/c64xh8f9.aspxजब स्ट्रिंग.क्वाल्स (सी #) का संस्कृति पैरामीटर वास्तव में एक फर्क पड़ता है?

मैं सिर्फ मूल्यों StringComparison.CurrentCulture, InvariantCulture, या क्रमसंख्या के बारे में बात कर रहा हूँ।
मैं इन और उनके इग्नोरकेस समकक्षों के बीच अंतर को समझ सकता हूं।

उत्तर

4

This MSDN पेज तार का उपयोग कर के बारे में जानकारी का एक बहुत कुछ है और निम्न उदाहरण यह से लिया जाता है (.NET फ्रेमवर्क में स्ट्रिंग्स का उपयोग के लिए उत्तम आचरण):

StringComparison.InvariantCulture और StringComparison.Ordinal के बीच
using System; 
using System.Globalization; 
using System.Threading; 

public class Example 
{ 
    public static void Main() 
    { 
     string[] values= { "able", "ångström", "apple", "Æble", 
         "Windows", "Visual Studio" }; 
     Array.Sort(values); 
     DisplayArray(values); 

     // Change culture to Swedish (Sweden). 
     string originalCulture = CultureInfo.CurrentCulture.Name; 
     Thread.CurrentThread.CurrentCulture = new CultureInfo("sv-SE"); 
     Array.Sort(values); 
     DisplayArray(values); 

     // Restore the original culture. 
     Thread.CurrentThread.CurrentCulture = new CultureInfo(originalCulture); 
    } 

    private static void DisplayArray(string[] values) 
    { 
     Console.WriteLine("Sorting using the {0} culture:", 
         CultureInfo.CurrentCulture.Name); 
     foreach (string value in values) 
     Console.WriteLine(" {0}", value); 

     Console.WriteLine(); 
    } 
} 
// The example displays the following output: 
//  Sorting using the en-US culture: 
//   able 
//   Æble 
//   ångström 
//   apple 
//   Visual Studio 
//   Windows 
//  
//  Sorting using the sv-SE culture: 
//   able 
//   Æble 
//   apple 
//   Windows 
//   Visual Studio 
//   ångström 
+0

धन्यवाद, कि मैं वास्तव में क्या ढूंढ रहा था

यहाँ एक उदाहरण है। इसमें कम से कम दो उदाहरण हैं: \ u0000 एक शून्य वर्ण के समान है यदि पैरामीटर अदृश्य संस्कृति है, लेकिन यह सामान्य नहीं है। \ u0061 \ u030a \ u00e5 जैसा ही है यदि पैरामीटर अदृश्य संस्कृति है, लेकिन यह सामान्य नहीं है। – zod

3

मतभेद काफी हैं ढूंढना आसान है, क्योंकि साधारण का मतलब है कि इसकी तुलना करने से पहले स्ट्रिंग को सामान्यीकृत नहीं किया जाता है। तो हमें बस एक सामान्यीकृत स्ट्रिंग को एक असामान्य स्ट्रिंग से तुलना करना होगा।

StringComparison.InvariantCulture और StringComparison.CurrentCulture (या विभिन्न CurrentCulture एस के बीच मतभेद) के बीच अंतर ढूंढना थोड़ा मुश्किल है, लेकिन वे मौजूद हैं।

string a = "\u00C4";  // "LATIN CAPITAL LETTER A WITH DIAERESIS" 
    string b = "\u0041\u0308"; // "LATIN CAPITAL LETTER A" - "COMBINING DIAERESIS" 

    Console.WriteLine(a.Equals(b, StringComparison.InvariantCulture)); // true 

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false); 
    Console.WriteLine(a.Equals(b, StringComparison.CurrentCulture)); // true 

    Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK", false); 
    Console.WriteLine(a.Equals(b, StringComparison.CurrentCulture)); // false 

    Console.WriteLine(a.Equals(b, StringComparison.Ordinal));   // false 

या यह एक है कि केवल ASCII वर्ण का उपयोग करता है:

string ddzs = "ddzs"; 
    string dzsdzs = "dzsdzs"; 

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false); 
    Console.WriteLine(ddzs.Equals(dzsdzs, StringComparison.CurrentCulture)); // false 

    Thread.CurrentThread.CurrentCulture = new CultureInfo("hu-HU", false); 
    Console.WriteLine(ddzs.Equals(dzsdzs, StringComparison.CurrentCulture)); // true 
संबंधित मुद्दे