दिलचस्प पोस्ट
एक्लिप्स के लिए जेवीएम अधिकतम हेप आकार बढ़ाएं गिनती नीचे टाइमर के लिए एक परिपत्र प्रगति सूचक कैसे बनाएं जावा जेनेरिक – क्यों "टी का विस्तार" की अनुमति है लेकिन "टी लागू" नहीं है? जावा में वेबसॉकेट उत्पादन तैयार सर्वर? क्या जावास्क्रिप्ट में स्थिरता है? Mysql डंप और आयात बढ़ा पायथन टाइपएरगेक्स पर रेगएक्स स्ट्रिंग को जावास्क्रिप्ट में एक नंबर पर कनवर्ट करें कोणीय यूआई रूटर इकाई परीक्षण (यूआरएल को बताएगा) ऐप्लीकेशन में एएसपी.नेट असेंबलियों को जीवित कैसे रखना है? डर्टियम में ब्रेकपॉइंट काम नहीं कर रहा है जावा में फ़ाइलचैनल का उपयोग करते हुए स्मृति मैप से एक फ़ाइल को कैसे अनमाप करें? क्या Google Apps स्क्रिप्ट का उपयोग करते हुए मैं Google दस्तावेज़ में कुछ शब्द रंग सकता हूँ? पीएल / एसक्यूएल, कैसे एक स्ट्रिंग में एकल बोली से बचने के लिए? स्ट्रिंग के लिए डबल / फ्लोट को कन्वर्ट करें

C ++ std :: pair का सी # एनालॉग क्या है?

मुझे सी # + std :: pair का सी # एनालॉग क्या है? मुझे सिस्टम। वेब। यूआई। पाईयर क्लास मिल गया है, लेकिन कुछ टेम्प्लेट आधारित चाहते थे।

धन्यवाद!

Solutions Collecting From Web of "C ++ std :: pair का सी # एनालॉग क्या है?"

Tuples .NET4.0 और समर्थन जेनेरिक के बाद से उपलब्ध हैं :

Tuple<string, int> t = new Tuple<string, int>("Hello", 4); 

पिछले संस्करणों में आप System.Collections.Generic.KeyValuePair<K, V> या निम्न तरह के समाधान का उपयोग कर सकते हैं:

 public class Pair<T, U> { public Pair() { } public Pair(T first, U second) { this.First = first; this.Second = second; } public T First { get; set; } public U Second { get; set; } }; 

और इसे इस तरह प्रयोग करें:

 Pair<String, int> pair = new Pair<String, int>("test", 2); Console.WriteLine(pair.First); Console.WriteLine(pair.Second); 

यह आउटपुट:

 test 2 

या यहां तक ​​कि यह जंजीर जोड़े:

 Pair<Pair<String, int>, bool> pair = new Pair<Pair<String, int>, bool>(); pair.First = new Pair<String, int>(); pair.First.First = "test"; pair.First.Second = 12; pair.Second = true; Console.WriteLine(pair.First.First); Console.WriteLine(pair.First.Second); Console.WriteLine(pair.Second); 

वह आउटपुट:

 test 12 true 

सिस्टम.Web.UI में Pair वर्ग शामिल था क्योंकि यह एएसपी.नेट 1.1 में एक आंतरिक व्यूस्टेट संरचना के रूप में भारी इस्तेमाल किया गया था।

अगस्त 2017 को अपडेट करें: सी # 7.0 / .NET ढाँचा 4.7 सिस्टम। वैल्यूट्यूपल स्ट्रेट का उपयोग कर नामित आइटम के साथ ट्यूपल को घोषित करने के लिए एक वाक्यविन्यास प्रदान करता है।

 //explicit Item typing (string Message, int SomeNumber) t = ("Hello", 4); //or using implicit typing var t = (Message:"Hello", SomeNumber:4); Console.WriteLine("{0} {1}", t.Message, t.SomeNumber); 

अधिक वाक्यविन्यास उदाहरणों के लिए MSDN देखें।

जून 2012 अपडेट करें: Tuples संस्करण 4.0 से .NET का एक हिस्सा रहा है।

यहां एनईटी 4.0 में शामिल किए जाने और जेनरिक के लिए समर्थन का वर्णन करने वाला एक पहला लेख है :

 Tuple<string, int> t = new Tuple<string, int>("Hello", 4); 

दुर्भाग्य से, कोई भी नहीं है आप कई स्थितियों में System.Collections.Generic.KeyValuePair<K, V> का उपयोग कर सकते हैं।

वैकल्पिक रूप से, आप कम-से-कम स्थानीय स्तर पर ट्यूपल्स को संभालने के लिए अनाम रूपों का उपयोग कर सकते हैं:

 var x = new { First = "x", Second = 42 }; 

अंतिम विकल्प एक स्वयं का वर्ग बनाना है

सी # में संस्करण 4.0 के रूप में ट्यूप्ले हैं

कुछ जवाब सिर्फ गलत लगते हैं,

  1. आप जोड़ी (ए, बी) और (ए, सी) को कैसे स्टोर करेंगे डिक्शनरी का इस्तेमाल नहीं कर सकते। जोड़े की अवधारणा को कुंजी और मूल्यों के साहचर्य रूप से भ्रमित नहीं होना चाहिए
  2. उपरोक्त कोड में संदेह लगता है

ये मेरी जोड़ी वर्ग है

 public class Pair<X, Y> { private X _x; private Y _y; public Pair(X first, Y second) { _x = first; _y = second; } public X first { get { return _x; } } public Y second { get { return _y; } } public override bool Equals(object obj) { if (obj == null) return false; if (obj == this) return true; Pair<X, Y> other = obj as Pair<X, Y>; if (other == null) return false; return (((first == null) && (other.first == null)) || ((first != null) && first.Equals(other.first))) && (((second == null) && (other.second == null)) || ((second != null) && second.Equals(other.second))); } public override int GetHashCode() { int hashcode = 0; if (first != null) hashcode += first.GetHashCode(); if (second != null) hashcode += second.GetHashCode(); return hashcode; } } 

यहां कुछ परीक्षण कोड है:

 [TestClass] public class PairTest { [TestMethod] public void pairTest() { string s = "abc"; Pair<int, string> foo = new Pair<int, string>(10, s); Pair<int, string> bar = new Pair<int, string>(10, s); Pair<int, string> qux = new Pair<int, string>(20, s); Pair<int, int> aaa = new Pair<int, int>(10, 20); Assert.IsTrue(10 == foo.first); Assert.AreEqual(s, foo.second); Assert.AreEqual(foo, bar); Assert.IsTrue(foo.GetHashCode() == bar.GetHashCode()); Assert.IsFalse(foo.Equals(qux)); Assert.IsFalse(foo.Equals(null)); Assert.IsFalse(foo.Equals(aaa)); Pair<string, string> s1 = new Pair<string, string>("a", "b"); Pair<string, string> s2 = new Pair<string, string>(null, "b"); Pair<string, string> s3 = new Pair<string, string>("a", null); Pair<string, string> s4 = new Pair<string, string>(null, null); Assert.IsFalse(s1.Equals(s2)); Assert.IsFalse(s1.Equals(s3)); Assert.IsFalse(s1.Equals(s4)); Assert.IsFalse(s2.Equals(s1)); Assert.IsFalse(s3.Equals(s1)); Assert.IsFalse(s2.Equals(s3)); Assert.IsFalse(s4.Equals(s1)); Assert.IsFalse(s1.Equals(s4)); } } 

यदि यह शब्दकोशों और पसंद के बारे में है, तो आप सिस्टम की तलाश कर रहे हैं। Colllections.Generic.KeyValuePair <TKey, TValue>।

आप जो पूरा करना चाहते हैं उसके आधार पर, आप संभवतः कीवालिप्यूयर की कोशिश कर सकते हैं

तथ्य यह है कि आप एंट्री की कुंजी को बदल नहीं सकते हैं, केवल मूल प्रविष्टि को KeyValuePair के एक नए इंस्टेंस द्वारा बदलकर ठीक किया जा सकता है।

मैंने ट्यूपल्स का सी # कार्यान्वयन बनाया है, जो समस्या को दो से पांच मानों के बीच समान रूप से हल करता है – यहां ब्लॉग पोस्ट है , जिसमें स्रोत के लिए एक लिंक है

मैं एक त्वरित Google के तुरंत बाद एक ही सवाल पूछ रहा था, मुझे पता चला कि इसमें एक। जोड़ी है, जो कि सिस्टम में है.इब.यूआई। ^ ~ ^ ( http://msdn.microsoft.com/en-us/ लाइब्रेरी / सिस्टम.वेब.आईपीएआर.एस्पक्स ) भली भांति पता चलता है कि संग्रह संरचना के बजाय उन्हें वहां क्यों रखा गया

चूंकि .NET 4.0 आपके पास System.Tuple<T1, T2> वर्ग है:

 // pair is implicitly typed local variable (method scope) var pair = System.Tuple.Create("Current century", 21); 

मैं आमतौर पर अपने खुद के जेनेरिक आवरण में Tuple वर्ग का विस्तार करता Tuple :

 public class Statistic<T> : Tuple<string, T> { public Statistic(string name, T value) : base(name, value) { } public string Name { get { return this.Item1; } } public T Value { get { return this.Item2; } } } 

और इसे इस तरह प्रयोग करें:

 public class StatSummary{ public Statistic<double> NetProfit { get; set; } public Statistic<int> NumberOfTrades { get; set; } public StatSummary(double totalNetProfit, int numberOfTrades) { this.TotalNetProfit = new Statistic<double>("Total Net Profit", totalNetProfit); this.NumberOfTrades = new Statistic<int>("Number of Trades", numberOfTrades); } } StatSummary summary = new StatSummary(750.50, 30); Console.WriteLine("Name: " + summary.NetProfit.Name + " Value: " + summary.NetProfit.Value); Console.WriteLine("Name: " + summary.NumberOfTrades.Value + " Value: " + summary.NumberOfTrades.Value); 

उपरोक्त काम करने के लिए (मुझे एक जोड़ी की जरूरत है एक शब्दकोश की कुंजी)। मुझे जोड़ना था:

  public override Boolean Equals(Object o) { Pair<T, U> that = o as Pair<T, U>; if (that == null) return false; else return this.First.Equals(that.First) && this.Second.Equals(that.Second); } 

और एक बार मैंने ऐसा किया जो मैंने भी जोड़ा

  public override Int32 GetHashCode() { return First.GetHashCode() ^ Second.GetHashCode(); } 

एक संकलक चेतावनी दबाने के लिए

पावरक्लॉक्शन्स लाइब्रेरी (पहले Wintellect से उपलब्ध है, लेकिन अब कोडप्लेक्स @ http://powercollections.codeplex.com पर होस्ट की गई है) में एक जेनेरिक जोड़ी संरचना है।

कस्टम क्लास या .NET 4.0 ट्यूपल्स के अलावा, सी # 7.0 के बाद से, ValueTuple नामक एक नई सुविधा है, जो एक ऐसी संरचना है जिसका इस्तेमाल इस मामले में किया जा सकता है। लेखन के बजाय:

 Tuple<string, int> t = new Tuple<string, int>("Hello", 4); 

और t.Item1 और t.Item2 माध्यम से मूल्यों का उपयोग, आप बस ऐसा कर सकते हैं:

 (string message, int count) = ("Hello", 4); 

या और भी:

 (var message, var count) = ("Hello", 4);