2009-03-27 3 views
3

일부 ASP.NET MVC 프로젝트를 분석하는 동안 익명 형식이 모두 흩어져있는 것을보아야합니다.익명 형식은 LINQ 외부에서 사용하는 것이 좋은가요?

HTML 헬퍼를 가지고 :

는 작업의 반환 형식의 많은을 가지고
<%=Html.TextBox("view.Address", "address", new { Class = "text_field" })%> 

:

JsonNetResult jsonNetResult = new JsonNetResult 
{ 
    Formatting = Formatting.Indented, 
    Data = new {Something= “”} 
} 

내가이 LINQ에서 온 알고 :

from p in context.Data 
select new { p.Name, p.Age }; 

이 있습니까 정말 지금 LINQ 외부에서 일을 수행하는 올바른 방법? 코드 재사용과 가독성에 해를 끼치고 있습니까?

+0

이것은 상당히 주관적이며 Argumenative이며, 재 작성하거나 편집 할 수 있으며, 트롤과 같지 않고 자신의 이유/우려 사항을 포함 할 수 있습니다. – JoshBerke

+1

OP가 그의 불길 뒤에 실제 추론을 제공하지 않았기 때문에 주관적/논증 적 결론으로 ​​결론 지었다. – mquander

+0

이것은 질문조차되지 않습니다. – OscarRyz

답변

5

IMHO, 익명 형식의 가장 큰 문제점은 해당 형식의 이름을 지정할 수 없기 때문입니다. 즉, 익명 형식의 형식을 코드의 식으로 명시 적으로 지정할 수 없습니다. 이것은 정말로 일반적인리스트를 만드는 것과 같은 일을하는 것을 어색하게 만든다.

var list = New List<No way to specify an Ananymous type>(); 

일반적으로 도우미 방법을 사용해야합니다.

public List<T> CreateList<T>(T notUsed) { 
    return new List<T>(); 
} 
var list = CreateList(new { .Class = "foo" }); 

이 또한 ... 등 (도우미 메서드를 필요로) 매우 어색 캐스팅하게,

당신이 반환 유형으로 익명 형식을 사용할 수 있다는 점에서 더 큰 영향을 미친다 그러나이 있습니다 익명 유형이 설계된 작업이 아닙니다. 여러 가지면에서 그들은 정의 된 특정 함수 내에서 사용되도록 설계되었으며 이후 람다식이 생성됩니다. 완벽한 기능을 갖춘 데이터 통신 유형이 아닙니다. 이것은 확실히 디자인의 한계이며, 때로는 나를 힘들게합니다. 그러나 전반적으로 저는 그것들이 언어에서 매우 유용한 구성물임을 알게됩니다.

LINQ의 많은 부분은 어떤 형태로든 가능하지 않을 수 있습니다.

+0

만약 그들에게 이름을 부여 할 수 있다면 그들은 익명이되지 않을 것입니다.이 다른 방법으로 생각하면, 진짜 문제는 언어는 유형을 추론 할 수있는 경우에도 유형을 명시해야합니다. –

+0

ToList() –

+0

@jachymko는 배열을 생성하는 데 오버 헤드를 가지고 있지만, 오히려 (새 [] {new {Class = "foo"}, 목록을 작성하십시오. 엄청난 오버 헤드가 아니라 하나도없는 오버 헤드. @Daniel, – JaredPar

0

나는

+0

모든 대리인 전달이 좋지 않다고 말하고 있습니까, 아니면 그것이 학대당하는 것을 본다고 말하고 있습니까? –

+0

너무 많이 사용되는 것을 봅니다. 특히 기존 코드를 확장하는 시나리오에서 프로그래머에게 게으른 단기 주의적 옵션을 제공합니다. 나는 코딩에 관해서는 거의 절대적으로 없다고 말할 것입니다.) – user83642

1

나는 사전을 구성하는 더 나은 방법으로 그들을 생각 일관된 도메인 수준 abstrations 람다 및 대의원의 대신 찾아 주위

저두 통과에 동의합니다. 특히 샘플에서 대안은 무엇입니까? 전달 IDictionary < 문자열, 개체>? 나는 익명의 타입이 더 읽기 쉽다고 생각한다.

3

생성되는 객체가 일시적인 객체, 즉 즉시 소비되거나 다른 것으로 변환 될 때, 나는 익명의 유형에 대한 생각을 좋아합니다. 수명이 짧은 컨테이너 일 뿐인 일회용 클래스로 코드를 낭비하는 것을 방지합니다. 귀하의 예제는 유용하게 사용되는 전형적인 유형의 사용법입니다. 즉, 도우미 확장에서 거의 항상 매개 변수 사전으로 즉시 변환되고 json 결과와 함께 직렬화됩니다. 클래스가 도메인 중요성을 가지거나 first-class 객체로 사용해야하는 경우 반드시 모든 도메인 클래스를 만듭니다.

0

나는 단지 내가 관심이있는 열을 표시 할 수의 GridView를 구성하는 많은 시간을 절약 할 수 있기 때문에있는 GridViews 및 DataGridViews을 채우기 위해 정기적으로 사용합니다. 설정에서 별도로

은 데이터 소스는, 그러나, 나는 그것이있을 거라고 생각 가독성을 위해 좋지 않음 - 좋은 추상화가 더 좋습니다.

관련 문제