yield , , yield return.
- , - . GameMoves. Cross() Circle() - . cross circle Cross() Circle() GameMoves. , , . Cross() . 8, yieldbreak; circle. Circle() Cross(), cross.
public class GameMoves
{
private IEnumerator cross;
private IEnumerator circle;
public GameMoves()
{
cross = Cross();
circle = Circle();
}
private int move = 0;
const int MaxMoves = 9;
public IEnumerator Cross()
{
while (true)
{
Console.WriteLine(", {0}", move);
if (++move >= MaxMoves) yield break;
yield return circle;
}
}
public IEnumerator Circle()
{
while (true)
{
Console.WriteLine(", {0}, move);
if(++move >= MaxMoves) yield break;
yield return cross;
}
}
}
GameMoves , . , game.Cross(). while enumerator.MoveNext. Cross(), yield. Current enumerator :
GameMoves game = new GameMoves();
IEnumerator enumerator = game.Cross();
while (enumerator.MoveNext())
{
enumerator = enumerator.Current as IEnumerator;
}
:
, 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, (tuple) . , F#, . .NET 4 .NET Framework .NET.
.NET 4 Tuple Tuple, . Tuple ; , Tuple<T1> , Tuple<T1,2>- ..
Divide() - Tuple<int,int>. , . Create() Tuple. Create() . result reminder :
|
|
public static Tuple<int,int> Divide (int dividend, int divisor)
{
int result = dividend/divisor;
int reminder = dividend%divisor;
return Tuple.Create<int, int>(result, reminder);
}
Divide(). Item1 Item2.
var result = Divide(5,2);
Console.WriteLine(" : (0), : {1}",
result.Item1, result.Item2);
, , Tuple . TRest, . , .
:
public class Tuple<T1, 2, 3, 4, 5, 6, 7, TRest>
- , :
var tuple = Tuple.Create<string,string,string,int,int,int,double,
Tuple<int,int> ("Stephanie", "Alina", "Nagel", 2009, 6, 2, 1.37,
Tuple.Create<int,int>(52, 3490));
, IStructuralEquatable IStructuralComparable. .NET 4 , . , . IStructuralEquatable , , a IStructuralComparable .
, IStructuralEquatable, Person, IEquatable. Equals(), FirstName LastName:
public class Person: IEquatable<Person>
{
public int Id {get; private set; }
public string FirstName {get; set;}
public string LastName {get; set;}
public override string ToString()
{
return String.Format("{0}, {1} {2}", Id, FirstName, LastName);
}
public override bool Equals(object obj)
{
if(obj == null) throw new ArgumentNullException("obj");
return Equals(obj as Person);
}
public override int GetHashCode()
{
return Id.GetHashCode();
}
public bool Equals(Person other)
{
if (other == null) throw new ArgumentNullException("other");
return this.Id==other.Id && this.FirstName==other.FirstName &&
this.LastName == other.LastName;
}
}
Person. Person janet Person . != true, , persons1 persons2. Equals() Array, == - .
|
|
var janet = new Person {FirstName = "Janet, LastName = "Jackson"};
Person [] persons1 = { new Person
{
FirstName = "Michael",
LastName = "Jackson"
},
janet
};
Person[] persons2 = { new Person
{
FirstName = "Michael",
LastName = "Jackson"
},
janet
};
if (persons1!= persons2)
Console.WriteLine(" ");
Equals(), IStructuralEquatable object IEqualityComparer, , , , IEqualityComparer<T>. IEqualityComparer EqualityComparer<T>. , IEquatable, IEquatable.Equals(). IEquatable, Equals() Object.
Person IEquatable<Person>, , , :
if ((persons1 as IStructuralEquatable).Equals(persons2,
EqualityComparer<Person>.Default))
{
Console.WriteLine(" ");
}
, . . , t1 t2 , != true:
var t1 = Tuple.Create<int, string>(l, "Stephanie");
var t2 = Tuple.Create<int, string>(l, "Stephanie");
if (t1!= t2) Console.WriteLine(" ");
Tuple<> Equals(): , Object, object , IStructuralEqualityComparer, - object IEqualityComparer. , . ObjectEqualityComparer<object> , EqualityComparer<object>.Default. , Object.Equals(). true, Equals() true, int string:
if (t1.Equals(t2)) Console.WriteLine(" ");
IEqualityComparer, TupleComparer. - Equals() GetHashCode() - IEqualityComparer.
class TupleComparer: IEqualityComparer
{
public new bool Equals(object x, object y)
{
return x.EquaLs(y);
}
public int GetHashCode(object obj)
{
return obj.GetHashCode();
}
}
Equals() IEqualityComparer new , Object Equals() .
TupleComparer Equals() Tuple<T1,2>. Equals() Tuple Equals() TupleComparer . Tuple<T1, 2> TupleComparer :
if (t1.Equals(t2, new TupleComparer()))
Console.WriteLine(" TupleComparer");
C# , . C# Array, .
|
|
, IComparable IComparer.
, IEnumerable IEnumerator, yield. , - .NET 4.