Soru HttpValueCollection ve NameValueCollection


Arasındaki fark nedir HttpValueCollection ve NameValueCollection?
Mümkünse lütfen örnek ile açıklayınız.

Teşekkürler


31
2017-09-22 12:05


Menşei




Cevaplar:


NameValueCollection anahtarlar için büyük / küçük harfe duyarlıdır HttpValueCollection değil. Ayrıca HttpValueCollection türetilen bir iç sınıftır NameValueCollection Doğrudan kodunuzda asla kullanmamanız gerektiği. Başka bir özelliği HttpValueCollection Bu koleksiyona eklediğinizde değerleri otomatik olarak kodlar.

İşte nasıl kullanılır HttpValueCollection sınıf:

class Program
{
    static void Main()
    {
        // returns an implementation of NameValueCollection
        // which in fact is HttpValueCollection
        var values = HttpUtility.ParseQueryString(string.Empty);
        values["param1"] = "v&=+alue1";
        values["param2"] = "value2";*

        // prints "param1=v%26%3d%2balue1&param2=value2"
        Console.WriteLine(values.ToString());
    }
}

44
2017-09-22 12:07



Açıklama için teşekkürler. - Amit Soni
Ayrıca hangi durumda HttpValueCollection ve NameValueCollection kullanmalıyız? - Amit Soni
@Amit, URL'lerle uğraşırken ve uygun şekilde kodlanmış parametreler oluşturmak istediğinizde kullanabilirsiniz HttpValueCollection. NameValueCollection jenerik olmayan yapısı nedeniyle kullanacağım bir sınıf değil. Daha güçlü bir şekilde yazmayı tercih ederim Dictionary<TKey, TValue> Örneğin. - Darin Dimitrov
Tamam, teşekkürler. - Amit Soni
Küçük düzeltme - NameValueCollection büyük / küçük harfe duyarlı büyük / küçük harf duyarlı karşılaştırıcı yapıcıda belirtilmedikçe, varsayılan olarak tuşlar için. - Ivan Korneliuk


Darin'in cevabında belli olmayan bir nokta, NameValueCollection geçersiz kılmıyor ToString() yöntem, HttpValueCollection onu geçersiz kılar. Bu özellik ve örtük URL değerlerin kodlanması, koleksiyonu sorgu dizesine geri dönüştürmek istiyorsanız, ikincisini doğru seçim yapar.

public class Test
{
    public static void Main()
    {
        var httpValueCollection = HttpUtility.ParseQueryString(string.Empty);
        httpValueCollection["param1"] = "value1";
        httpValueCollection["param2"] = "value2";
        Console.WriteLine(httpValueCollection.ToString());

        var nameValueCollection = new NameValueCollection();
        nameValueCollection["param1"] = "value1";
        nameValueCollection["param2"] = "value2";
        Console.WriteLine(nameValueCollection.ToString());  
    }
}

Çıktılar:

param1=value1&param2=value2
System.Collections.Specialized.NameValueCollection

4
2017-11-02 08:12