source

C# 및 익명 객체 배열

nicesource 2023. 6. 18. 16:06
반응형

C# 및 익명 객체 배열

그런 표현은 무슨 뜻입니까?

obj.DataSource = new[]
{
    new {Text = "Silverlight", Count = 10, Link="/Tags/Silverlight" },
    new {Text = "IIS 7", Count = 11, Link="http://iis.net" },
    new {Text = "IE 8", Count = 12, Link="/Tags/IE8" },
    new {Text = "C#", Count = 13, Link="/Tags/C#" },
    new {Text = "Azure", Count = 13, Link="?Tag=Azure" }
};

특히 이 행들: 새로운 {Text = "I is 7"...}

이 데이터 소스에 맞게 이러한 배열을 수동으로 생성하려면 어떻게 해야 합니까?

먼저 코드를 조금 다시 포맷해 보겠습니다.

obj.DataSource = new[]
{
    new {  Text = "Silverlight",  Count = 10,  Link = "/Tags/Silverlight"  },
    new {  Text = "IIS 7",        Count = 11,  Link = "http://iis.net"     }, 
    new {  Text = "IE 8",         Count = 12,  Link = "/Tags/IE8"          }, 
    new {  Text = "C#",           Count = 13,  Link = "/Tags/C#"           },
    new {  Text = "Azure",        Count = 13,  Link = "?Tag=Azure"         } 
};

이것은 다차원 배열처럼 보이지 않고 오히려 5개의 객체 배열처럼 보입니다.배열 내부의 이러한 개체는 다음을 사용하여 생성 및 초기화된 익명 유형입니다.new { ... }.

데이터 소스에 맞게 수동으로 배열을 만들 수 있는 방법에 대한 질문과 관련하여: 당신은 위의 코드로 정확히 그렇게 하고 있는 것 같습니다.

그것은 다차원 배열이 아닙니다.이것은 익명 유형의 객체 이니셜라이저를 사용하여 만든 객체 배열입니다.

익명 유형의 배열처럼 보입니다.

http://msdn.microsoft.com/en-us/library/bb397696.aspx

추가할 내용:컴파일러가 익명 형식을 실제 개체로 변환합니다.따라서 코드는 이것과 동등한 것으로 변경될 것입니다(더 단순화된 것은 컴파일러가 실제 클래스를 만들 것임을 보여주기 위한 것일 뿐입니다)

internal sealed class AnonymousClass1
{
    internal string Text { get; set; }
    internal int Count { get; set; }
    internal string Link { get; set; }
}

그러면 코드가 다음으로 변경됩니다.

obj.DataSource = new AnonymousClass1[]
{
    new AnonymousClass1 {Text = "Silverlight", Count = 10, Link="/Tags/Silverlight" },
    new AnonymousClass1 {Text = "IIS 7", Count = 11, Link="http://iis.net" },
    new AnonymousClass1 {Text = "IE 8", Count = 12, Link="/Tags/IE8" },
    new AnonymousClass1 {Text = "C#", Count = 13, Link="/Tags/C#" },
    new AnonymousClass1 {Text = "Azure", Count = 13, Link="?Tag=Azure" }
};

프로그램 중 하나에서 다음과 같은 코드가 있습니다(간체!).

var myObjects = new []{
    new { Id = Guid.NewGuid(), Title = "Some Title", Description = string.Empty },
    new { Id = Guid.NewGuid(), Title = "Another Title", Description = string.Empty },
    new { Id = Guid.NewGuid(), Title = "Number 3", Description = "Better than No2, but not much" }
}

foreach(var myObject in myObjects) {
    DoSomeThingWith(myObject.Title);
}

이것은 단지 무대 뒤에서 다른 수업이기 때문에 효과가 있습니다.이점은 분명히 제가 이 오브젝트에 대한 클래스를 만드는 것으로부터 저 자신을 구했다는 것입니다.내 예에서 모든 개체는 동일하게 보여야 합니다. (분명히 공용 구성원에 대해 이 작업을 수행하는 것은 좋지 않습니다. 일부 개체를 추가/제거하면 컴파일러가 익명 클래스의 이름을 변경할 수 있기 때문입니다.

그것은 익명의 객체 그룹을 포함하는 새로운 객체 배열을 만들고 있습니다.

new {Text = "Azure", Count = 13, Link="?Tag=Azure" }

php would라고 하는 유사한 구문과 같은 해시를 만드는 것이 아니라 Test, Count 및 Link 속성이 설정된 실제 개체를 만드는 것입니다.

익명의 물체에 대한 좋은 입문서는 여기에서 찾을 수 있습니다.

동일한 구문을 사용하여 다음과 같은 새 구조를 만들 수 있어야 합니다. 속성 값이 상수일 필요는 없습니다.

string text = "Azure";
int count = 13;
string link =  "?Tag=Azure";
new {Text = text, Count = count, Link=link }

사용한 함수에서 이러한 배열을 반환하려면:

public object GetAnonymousArray()
{
    var tbl = new List<object>();
    while (___)
    {
        //fill array in cycle
        tbl.Add(new {Text = someString, Count = someInt, Link = link});
    }  
    return tbl;
}

언급URL : https://stackoverflow.com/questions/2035017/c-sharp-and-arrays-of-anonymous-objects

반응형