문제

나는에 대해 많이 알고 있 C#그러나 이것은 연설을 저와 Google 는 도움이 되지 않습니다.

나페 범위의 객체입니다.나는 설정하려 속에 첫 번째 하나입니다.나는 그렇게,하지만 내가 열거를 통해 개체 범위 수정,보이지 않 변경합니다.

여기에는 좋은 문제의 예:

    public static void GenericCollectionModifier()
    {
        // 1, 2, 3, 4... 10
        var range = Enumerable.Range(1, 10);

        // Convert range into SubItem classes
        var items = range.Select(i => new SubItem() {Name = "foo", MagicNumber = i});

        Write(items);  // Expect to output 1,2,3,4,5,6,7,8,9,10

        // Make a change
        items.First().MagicNumber = 42;

        Write(items);  // Expect to output 42,2,3,4,5,6,7,8,9,10
        // Actual output: 1,2,3,4,5,6,7,8,9,10
    }

    public static void Write(IEnumerable<SubItem> items)
    {
        Console.WriteLine(string.Join(", ", items.Select(item => item.MagicNumber.ToString()).ToArray()));
    }

    public class SubItem
    {
       public string Name;
       public int MagicNumber;
    }

어떤 측면의 C#정"MagicNumber=42"에서 변화되는 출력을 말합니다.이 있을 수 있는 방법을 내는 변경하여""지팡이 하지 않고 어린이로 변환하 목록<>또는 배열?

감사합니다!-마이크

도움이 되었습니까?

해결책

를 호출할 때 처음()열거 이상의 결과를 이 조의 코드:

Select(i => new SubItem() {Name = "foo", MagicNumber = i});

참고 하는 선택입니다 열거자는 의미,그것은 단지 선택하신 경우 항목이 그것에서(그리고 그것은 시간을 묻는다).결과는 어디에도 저장되지 않습니다,그래서 전화할 때 항목입니다.처음()신 새로운 SubItem 인스턴스입니다.할 때 다음 항목을 작성,그것은 무리의 새로운 SubItem 인스턴스-지 않는 한 당신이 가기 전에.

을 저장하려는 경우의 결과를 선택하고 수정하는것,당신이해야 할 뭔가가 다음과 같:

var items = range.Select(i => new SubItem() {Name = "foo", MagicNumber = i}).ToList();

다른 팁

내가 의심 뭔가를 배경에 있습니다.가장 가능성이 사실로 인해 IEnumerables 수 있습만 반복하면.

그것은 작동하는 경우 추가'ToList()'호출한 후 Select()할당할 때을'항목이'?

네트워크가 필요하지 않습니다 생각하는 항목입니다.처음()이용권 사본 의 하위 항목하는 대신 참조할 때,그래서 당신이 설정 변경되지 않를 통해 수행됩니다.

나는 가정하는 뭔가가 있으로 진행할 수있는 반복되면.할 수 있습을 변경하십시오 this:

// Convert range into SubItem classes
var items = range.Select(i => new SubItem() {Name = "foo", MagicNumber = i});

하기

// Convert range into SubItem classes
var items = range.Select(i => new SubItem() {Name = "foo", MagicNumber = i}).ToList();

고 있는 경우에는 다른 결과입니다.

할 수 없/지 않을 수정하는 컬렉션을 통해거움을 누리고 있다고 말한다.놀랐어요 이를 버리지 않는 예외입니다.

.처음()메서드,되지 않을 제공합니다.그것은 반환하는 새로운 개체의 인스턴스에서 첫 번째 위치의 당신의 열거.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top