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
'source' 카테고리의 다른 글
플로트에 대한 범위(범위) (0) | 2023.06.18 |
---|---|
어떻게 모든 깃 커밋을 하나로 뭉치나요? (0) | 2023.06.18 |
부탁한다.RawUr.부탁한다.URL (0) | 2023.06.18 |
스케줄링된 작업으로 실행할 때 PowerShell 스크립트가 파일에 액세스할 수 없음 (0) | 2023.06.18 |
Sys.WebForms.페이지 요청 관리자 파서 오류 예외:서버에서 받은 메시지를 구문 분석할 수 없습니다. (0) | 2023.06.18 |