我偶尔会发现自己在C#3.0中寻找模拟元组概念的方法.随着时间的推移,我有各种"穷人"的实现,这里有一些:
基本对象数组:
object[] poorTuple = new object[]{foo,bar,baz}; // basic object array
Run Code Online (Sandbox Code Playgroud)
更强烈的类型,HoHoHo ......
KeyValuePair<TypeA, KeyValuePair<TypeB, TypeC>> poorTuple;
Run Code Online (Sandbox Code Playgroud)
实现一个可以使用类型推断的类(从真实世界的函数编程中解除)
public static class Tuple{
public static Tuple<T1, T2> Create<T1 foo, T2 bar>{
return new Tuple<T1, T2>(foo, bar);
}
}
// later:
var data = Tuple.Create("foo", 42);
Run Code Online (Sandbox Code Playgroud)
问题:
在C#3.0(或缺乏数据结构的选择语言)中使用穷人元组的任何其他方法.
在C#3.0中获取元组的最佳方法是什么- 如果有人有图书馆推荐,欢迎使用.
在什么时候(是的,概括为我)创建一个特定类型而不是列表或元组之类的东西是否有意义?(寻找经验法则)
您可以创建与元组功能类似的匿名类型,但有用的名称除外:
var itemsWithChildCounts
= myObjects.Select(x => new { Name = x.Name, Count = x.Children.Count() });
Run Code Online (Sandbox Code Playgroud)
以下是Bill Wagner 在2007年4月版Visual Studio Magazine中的文章中的通用元组代码.
public struct Tuple<T1, T2> : IEquatable<Tuple<T1, T2>>
{
private readonly T1 first;
public T1 First
{
get { return first; }
}
private readonly T2 second;
public T2 Second
{
get { return second; }
}
public Tuple(T1 f, T2 s)
{
first = f;
second = s;
}
#region IEquatable<Tuple<T1,T2>> Members
public bool Equals(Tuple<T1, T2> other)
{
return first.Equals(other.first) &&
second.Equals(other.second);
}
public override bool Equals(object obj)
{
if (obj is Tuple<T1, T2>)
return this.Equals((Tuple<T1, T2>)obj);
else
return false;
}
public override int GetHashCode()
{
return first.GetHashCode() ˆ second.GetHashCode();
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3916 次 |
| 最近记录: |