vb.net에서 정말 멋질 때 with () 구조가 C#에 포함되지 않은 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/429890

  •  07-07-2019
  •  | 
  •  

문제

저는 C# 개발자입니다. 나는 C, C ++ 및 Java 배경에서 나왔기 때문에 Curly Brace를 정말 좋아합니다. 그러나 나는 또한 vb.net과 같은 .NET 제품군의 다른 프로그래밍 언어를 좋아합니다. c#과 vb.net 사이를 앞뒤로 전환하는 것은 .NET에서 잠시 프로그래밍 한 경우 실제로 큰 거래는 아닙니다. 그것은 내가 일하는 회사에서 매우 일반적인 접근법입니다. C# Guy로서, 나는 XML 리터럴을 정말 좋아하고 with vb.net 컴파일러가 제공하는 키워드. Microsoft가 이러한 기능을 C#에 포함 시켰 으면 좋겠습니다.

나는 단지 궁금합니다. 다른 개발자가 그것에 대해 무엇을 말해야하는지!

도움이 되었습니까?

해결책

"with"또는 유사한 기능이 C#에 추가되면 결국 다른 인기있는 독점적 인 VB 기능과 함께 C#에 추가되면 놀라지 않을 것입니다. 최근 PDC와 C# 4.0 및 VB 10으로 시작하는 "언어 패리티에 대한 초점"의 다른 곳에서 C# 4.0 미리보기 프리젠 테이션에서 많은 대화가있었습니다.

다른 팁

개인적으로 나는 건축 후 사용될 때 마음에 들지 않습니다. 초기화 후 물체로 여러 가지 작업을 수행 해야하는 경우 일반적으로 동작은 유형 자체에 캡슐화되어야합니다. 당신이 정말로 당신과 같은 일을하고 싶다면, 그것은 짧은 변수를 선언하고 선택적으로 새로운 범위를 도입하는 문제 일뿐입니다.

그러나, 그것은 ~이다 여러 속성으로 객체를 소형화 할 수 있도록 유용합니다. C# 3이 작성할 수있는 이유입니다.

MyObject x = new MyObject { Name="Fred", Age=20, Salary=15000 };

이것에 대한 제한 사항이 있습니다 (C# 4의 선택 사항 및 명명 매개 변수는 극복하는 데 도움이 될 것입니다).

(XML 리터럴 프론트에서, 나는 다시 C# 팀과 함께 - XML은 언어에 넣을 수있는 매우 구체적인 기술입니다. 일반화 XML을 생성하는 데 발생했지만 다른 나무를 만드는 데 사용될 수있는 형태는 좋을 것입니다. 쿼리 표현식이 ienumerable에 직접 연결되어 있지 않거나 iqueryable에 직접 연결되어 있지 않은 것처럼.)

vb.net을 교체 할 수 있습니다 With 빠른 단일 글자 변수 이름을 만들어 실제로 코드가 적습니다 With 또한 필요합니다 End With 나중에.

예를 들어, 내가 자주 수행해야했던 한 가지는 컨트롤/브레이크 스타일 보고서를 위해 데이터 가능한 행으로 행을 반복하는 것입니다.

vb.net에서는 다음과 같습니다.

Dim CurCustomerName As String 
Dim CustomerSalesTotal As Decimal

Dim ds As DataSet = GetReportData()
With ds.Tables(0).Rows
   Dim i As Integer = 0
   While i < .Count
       ''//{
       CurCustomerName = .Item(i)("CustName")
       CustomerSalesTotal = 0
       PrintHeaderLine(CurCustomerName)

       While i < .Count AndAlso CurCustomerName = .Item(i)("CustName")
            ''//{
            PrintItemLine(.Item(i)("OrderTotal"))
            CustomerSalesTotal += .Item(i)("OrderTotal")

            i+= 1
       End While ''//}
       PrintSubTotalLine(CustomerSalesTotal)
   End While ''//}
End With

C#은 다음과 같습니다.

string CurCustomerName;
Decimal CustomerSalesTotal;

DataSet ds = GetReportData();
DataRowCollection r = ds.Tables[0].Rows;
int i=0;
while (i<r.Count)
{
    CurCustomerName = r[i]["CustName"];
    CustomerSalesTotal = 0;
    PrintHeaderLine(CurCustomerName);

    while (i<r.Count && CurCustomerName == r[i]["CustName"])
    {
        PrintItemLine(r[i]["OrderTotal"]);
        CustomerSalesTotal += r[i]["OrderTotal"];

        i++;
    }
    PrintSubTotalLine(CustomerSalesTotal);
}

여기서 주목해야 할 것은 VB가 결합 할 수 없었기 때문에 C# 버전에 실제로 타이핑이 적은 것이 필요하다는 것입니다. WITH 배열 인덱스를 사용하여 .Item 특정한 것들에 대한 재산. 여기서 큰 문제는 아니지만 보고서에 2 대신 20 개의 필드가 있고 1 대신 3 개 항목을 깨뜨려야한다고 상상해보십시오.

물론 VB에 C#에 시연 된 기술을 사용할 수도 있습니다. 그러나 주목해야 할 중요한 것은 그 것입니다 WITH 실제로 당신에게 많이주지 않습니다.

그것은 개발자 선호도에 관한 것이지만 나는 당신과 함께 있습니다. 내가 선호하는 것은 플레이의 변수 수와 그들이 사는 범위를 최소화하는 것입니다. C#의 철학은 거의 동일합니다. 그러나이 경우 여기서의 응답은 변수를 추가하고 책임을 져야하는 것이 Lambdas와 매우 유사한 구성과 비교할 때 좋은 일이라고 제안하는 것 같습니다.

초기화 중에 '질량'속성 설정 만 허용하는 것이 다소 임의적이라고 생각합니다. 왜 이것이 왜 '나쁜'지는 이유를 알지 못합니다.

MyObj myObj = ObjFactoryFunction();

...

if(someCondition)
  myObj { Prop1 = 1, Prop2 = 2 };

이 예제 코드는 깨끗하고 간결하다고 생각합니다.

보통 a에 대한 요청을 볼 때 with C#의 기능, 리팩토링의 혜택을 볼 수있는 코드가 나타납니다. 일반적으로 리팩토링이 완료되면 with 사라.

나는 객체에 유창한 인터페이스를 만들 때 내 코드가 작동하는 방식이 마음에 듭니다. 그것은 몇 가지 유사점이 있습니다 with. 내가 디자인하고 있다면 MessageBox.Show(), 나는 다음을 쓸 수있다 :

new MessageBox()
    .SetText("Hello World!")
    .SetButtons(MessageBox.Buttons.OK)
    .SetIcon(MessageBox.Icon.Information)
    .Show();

LINQ와 비슷한 것을 볼 수 있습니다.

var q = Enumerable.Range(1, 100)
            .Where(x => x % 2 == 0)
            .Select(x => x * x);

조금 비슷합니다 with 그러나 내가 이미 가지고있는 언어에 자연스럽게 맞는 것 같습니다.

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