我很感兴趣:C#std::pair
在C++中的模拟是什么?我找到了System.Web.UI.Pair
课程,但我更喜欢基于模板的课程.
谢谢!
从.NET4.0开始提供元组并支持泛型:
Tuplet = new Tuple ("Hello", 4);
在以前的版本中,您可以使用System.Collections.Generic.KeyValuePair
或解决方案如下:
public class Pair{ public Pair() { } public Pair(T first, U second) { this.First = first; this.Second = second; } public T First { get; set; } public U Second { get; set; } };
并像这样使用它:
Pairpair = new Pair ("test", 2); Console.WriteLine(pair.First); Console.WriteLine(pair.Second);
这输出:
test 2
甚至这个链式对:
Pair, bool> pair = new Pair , bool>(); pair.First = new Pair (); 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
System.Web.UI
包含Pair
该类,因为它在ASP.NET 1.1中被大量使用作为内部ViewState结构.
2017年8月更新: C#7.0/.NET Framework 4.7提供了使用System.ValueTuple
struct 声明具有命名项的元组的语法.
//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年6月更新: Tuples
自4.0版以来一直是.NET的一部分.
这是一篇早期文章,描述了.NET4.0中的包含和对泛型的支持:
Tuplet = new Tuple ("Hello", 4);
不幸的是,没有.你可以System.Collections.Generic.KeyValuePair
在很多情况下使用它.
或者,您可以使用匿名类型来处理元组,至少在本地:
var x = new { First = "x", Second = 42 };
最后一种方法是创建一个自己的类.
C#具有4.0版本的元组.
一些答案似乎错了,
你不能使用字典如何存储对(a,b)和(a,c).不应将对概念与关键和值的关联查找混淆
很多上面的代码似乎都很可疑
这是我的配对课程
public class Pair{ 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 other = obj as Pair ; 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"; Pairfoo = new Pair (10, s); Pair bar = new Pair (10, s); Pair qux = new Pair (20, s); Pair aaa = new Pair (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 s1 = new Pair ("a", "b"); Pair s2 = new Pair (null, "b"); Pair s3 = new Pair ("a", null); Pair s4 = new Pair (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)); } }
如果它是关于词典之类的,那么你正在寻找System.Collections.Generic.KeyValuePair