.


:




:

































 

 

 

 





, . , GetPersons():

static Person[] GetPersons()

{

return new Person [ ] {

new Person { FirstName="Damon", LastName="Hill" },

new Person { FirstName="Niki", LastName="Lauda" },

new Person { FirstName="Ayrton", LastName="Senna" },

new Person { FirstName="Graham", LastName="Hill" }

};

}

, DisplayPersons():

static void DisplayPersons(Person[] persons)

{

//...

. , , . , object[] Person[]:

static void DisplayArray(object[] data).

{

//...

}

, , .

 

, . Person object, mo object , object. , . , Person object, .

ArraySegment<T>

ArraySegment<T> . , . , , ArraySegment<T>. ( ) .

SumOfSegments ArraySegment<int> , , :

static int SumOfSegments(ArraySegment<int>[] segments)

{

int sum =0;

foreach (var segment in segments)

{

for (int i=segment.Offset; i<segment.Offset+segment.Count; i++)

{

sum += segment.Array[i];

}

}

return sum;

}

. ar1, , - r2, :

int[] ar1 = { 1, 4, 5, 11, 13, 18 };

int[] ar2 = { 3, 4, 5, 18, 21, 27, 33 };

var segments = new ArraySegment<int>[2]

{

new ArraySegment<int>(ar1, 0, 3),

new ArraySegment<int>(ar2, 3, 3)

};

var sum = SumOfSegments(segments);

 

, . ArraySegment<T> , .

foreach (. 6.10) . foreach (enumerator). . 6.7 , foreach, . IEnumerable GetEnumerator(). GetEnumerator() , IEnumerable. IEnumerable foreach .

 

 

GetEnumerator() IEnumerable. foreach , . GetEnumerator(), , IEnumerator.

 


6.7 - , foreach,

IEnumerator

foreach IEnumerator . IEnumerator Current , , MoveNext() true, , false, .

IEnumerator<T> - IDisposable, Dispose() , .

lEnumerator Reset() . .NET NotSupportedException.

foreach

foreach C# foreach IL. C# foreach IEnumerable. foreach :

foreach (var in persons)

{

Console.WriteLine();

}

foreach . GetEnumerator() . while - , MoveNext() true - Current:

IEnumerator<Person> enumerator = persons.GetEnumerator();

while (enumerator.MoveNext())

{

Person p = (Person)enumerator.Current;

Console.WriteLine(p);

}

yield

C# foreach. C# 1.0 . C# 2.0 yield . yield return , yield break .

yield return. HelloCollection GetEnumerator(). GetEnumerator () yield return, "Hello" "World".

using System;

using System.Collections;

 

namespace Wrox.ProCSharp.Arrays

{

public class HelloCollection

{

public XEnumerator<string> GetEnumerator()

{

yield return "Hello";

yield return "World";

}

}

, yield, . IEnumerator IEnumerable . yield return yield break; return .

foreach:

public void HelloWorld()

{

var helloCollection = new HelloCollection();

foreach (string s in helloCollection)

{

Console.WriteLine(s);

}

}

}

yield, , . yield IEnumerator IDisposable. yield Enumerator. GetEnumerator() yield. yield state , MoveNext(). MoveNext() , Current , .

 

public class HelloCollection

{

public IEnumerator GetEnumerator()

{

return new Enumerator (0);

}

public class Enumerator: IEnumerator<string>,IEnumerator,IDisposable

{

private int state;

private object current;

public Enumerator(int state)

{

this.state = state;

}

bool System.Collections.IEnumerator.MoveNext()

{

switch (state)

{

case 0:

current = "Hello";

state = 1;

return true;

case 1:

current = "World";

state = 2;

return true;

case 2:

break;

}

return false;

}

string System.Collections.Generic.IEnumerator<string>.Current

{

get

{

return current;

}

}

object System.Collections.IEnumerator.Current

{

get

{

return current;

}

}

void IDisposable.Dispose()

{

}

}

}

, ield , , . foreach. , foreach, . .

 





:


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


:

:

80% - .
==> ...

1513 - | 1356 -


© 2015-2024 lektsii.org - -

: 0.026 .