.


:




:

































 

 

 

 


yield return




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.





:


: 2017-02-25; !; : 318 |


:

:

80% - .
==> ...

1706 - | 1558 -


© 2015-2024 lektsii.org - -

: 0.02 .