건어물 습격!C\#7.0 새로운 기능(VS 2017 사용 가능)
마이크로소프트 가 어제 새로운 VS 2017 을 발 표 했 습 니 다.그 에 따 른 많은 것들 이..................................................................
사실 2016 년 12 월 에 발 표 된 C\#7.0 의 새로운 특성 을 공유 해 보 세 요.일찍 나 왔 지만 이 IDE 는 지원 하지 않 습 니 다.
하지만 어제 VS 2017 에 서 는 완벽 하 게 사용 할 수 있 었 습 니 다.
E.좋 습 니 다.공식 소개 주소 로 이동 합 니 다.https://docs.microsoft.com/zh-cn/dotnet/articles/csharp/csharp-7
먼저 관련 문법 을 열거 하 세 요.
1.out-variables(Out 변수)
2.Tuples(원조)
3.패턴 매 칭(매 칭 모드)
4.ref locals and returns(부분 변수 와 참조 반환)
5.Local 함수(부분 함수)
6.More expression-bodied members(더 많은 함수 구성원 의 표현 식 체)
7.throw 표현 식(이상 표현 식)
8.Generalized async return types(일반적인 비동기 반환 형식)
9.숫자 문자 문법 개선(수치 문자 문법 개선)
본문
1.out-variables(Out 변수)
예전 에 우리 가 out 변 수 를 사용 할 때 외부 에서 먼저 설명 한 다음 에 들 어 갈 수 있 는 방법 은 다음 과 같 습 니 다.
string ddd = ""; //
ccc.StringOut(out ddd);
Console.WriteLine(ddd);
C\#7.0 에서 우 리 는 설명 할 필요 가 없고 매개 변수 가 전달 되 는 동시에 다음 과 같이 설명 할 수 있다.
StringOut(out string ddd); //
Console.WriteLine(ddd);
Console.ReadLine();
2.Tuples(원조)증 금.NET 4.0 에서 마이크로 소프트 는 여러 개의 반환 값 을 우리 에 게 원 그룹 이 라 고 하 는 해결 방안 을 주 었 다.유사 한 코드 는 다음 과 같다.
static void Main(string[] args)
{
var data = GetFullName();
Console.WriteLine(data.Item1);
Console.WriteLine(data.Item2);
Console.WriteLine(data.Item3);
Console.ReadLine();
}
static Tuple<string, string, string> GetFullName()
{
return new Tuple<string, string, string>("a", "b", "c");
}
위의 코드 는 세 개의 문자열 이 있 는 원 조 를 되 돌려 주 는 방법 을 보 여 주 었 습 니 다.그러나 우리 가 값 을 얻 었 을 때 마음 이 터 졌 습 니 다.아 이 템 1,아 이 템 2,아 이 템 3 은 어떤 귀신 입 니까?우리 의 요구 에 도 달 했 지만 정말 우아 하지 않 습 니 다.그러면 C\#7.0 에서 마이크로소프트 는 더욱 우아 한 방안 을 제공 합 니 다.(주의:nuget 을 통 해 System.ValueTuple 을 참조 해 야 합 니 다)다음 과 같 습 니 다.
static void Main(string[] args)
{
var data=GetFullName();
Console.WriteLine(data.a); //
Console.WriteLine(data.b);
Console.WriteLine(data.c);
Console.ReadLine();
}
// ,
private static (string a,string b,string c) GetFullName()
{
return ("a","b","c");
}
원본 그룹 을 해체 합 니 다.가끔 은 var 익명 으로 가 져 오고 싶 지 않 을 때 가 있 습 니 다.abc 를 어떻게 가 져 옵 니까?우 리 는 다음 과 같이 할 수 있다.
static void Main(string[] args)
{
//
(string a, string b, string c) = GetFullName();
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.ReadLine();
}
private static (string a,string b,string c) GetFullName()
{
return ("a","b","c");
}
3.패턴 매 칭(매 칭 모드)C\#7.0 에서 일치 하 는 모드 의 게임 방법 을 도 입 했 습 니 다.먼저 밤 을 들 었 습 니 다.하나의 object 유형 입 니 다.우 리 는 그 가 int 인지 아 닌 지 를 판단 하고 싶 습 니 다.int 라면 10 을 추가 한 다음 에 출력 하려 면 다음 과 같 아야 합 니 다.
object a = 1;
if (a is int) //is
{
int b = (int)a; //
int d = b+10; // 10
Console.WriteLine(d); //
}
그러면 C\#7.0 에서 먼저 is 에 대한 작은 확장 입 니 다.우 리 는 이렇게 쓰 면 됩 니 다.다음 과 같 습 니 다.
object a = 1;
if (a is int c) // , int c
{
int d = c + 10;
Console.WriteLine(d);
}
이렇게 하면 매우 편리 하지 않 습 니까?특히 반 사 를 자주 쓰 는 동지 들 은...그럼 문제 가 생 겼 습 니 다.굴착기 기술 은 어느 쪽 이 강 합 니까?!(크 크,퉤 농담)
사실은 여러 가지 유형 이 일치 해 야 한다 면 어떻게 해 야 합 니까?if else 여러 개?물론 괜 찮 습 니 다.하지만 마이크로소프트 아버지 도 switch 의 새로운 게임 방법 을 제공 하 셨 습 니 다.어디 보 자.다음 과 같 습 니 다.
Object 를 매개 변수 로 동적 형식 으로 되 돌려 주 는 Add 방법 을 정의 합 니 다.
static dynamic Add(object a)
{
dynamic data;
switch (a)
{
case int b:
data=b++;
break;
case string c:
data= c + "aaa";
break;
default:
data = null;
break;
}
return data;
}
다음 실행,int 형식 으로 전송:
object a = 1;
var data= Add(a);
Console.WriteLine(data.GetType());
Console.WriteLine(data);
출력 그림:String 형식의 인자,코드 와 출력 은 다음 과 같 습 니 다.
object a = "bbbb";
var data= Add(a);
Console.WriteLine(data.GetType());
Console.WriteLine(data);
위의 코드 를 통 해 우 리 는 switch 의 새로운 게임 방법 이 얼마나 원활 하고 강 한 지 알 수 있 습 니 다.
일치 하 는 패턴 의 Case When 필터
어떤 기 우 는 곧 물 어 볼 것 이다.우리 가 Switch 에서 유형 을 일치 시 킬 수 있 으 니,우 리 는 가 는 길에 값 을 선별 할 수 있 습 니까?답 은 당연히 긍정 적 이다.
우 리 는 위의 스위치 코드 를 다음 과 같이 고 쳤 다.
switch (a)
{
case int b when b < 0:
data = b + 100;
break;
case int b:
data=b++;
break;
case string c:
data= c + "aaa";
break;
default:
data = null;
break;
}
입력-1 해 보 세 요.결 과 는 다음 과 같 습 니 다.4.ref locals and returns(부분 변수 와 참조 반환)
이미 보충,이동:C\#7.0 의 ref locals and returns(부분 변수 와 참조 반환)
5.Local 함수(부분 함수)
음,이것 은 약간 전복 되 었 습 니 다.모두 가 알 고 있 듯 이 국부 변 수 는 특정한 과정 이나 함수 에서 만 접근 할 수 있 는 변 수 를 말 합 니 다.
그럼 이 부분 함 수 는 말 그대로 특정한 함수 에서 만 접근 할 수 있 는 함수 입 니 다.
사용 방법 은 다음 과 같다.
public static void DoSomeing()
{
// Dosmeing2
int data = Dosmeing2(100, 200);
Console.WriteLine(data);
// ,Dosmeing2.
int Dosmeing2(int a, int b)
{
return a + b;
}
}
어,설명 하 자 면 아마도 DoSoming 에서 DoSoming 2 의 방법 을 정 의 했 을 거 야..앞에서 호출 했 어.(주:주의해 야 할 것 은 부분 함수 가 방법의 모든 위치 에 정의 되 어 있 고 방법 내 에서 호출 될 수 있 으 며 한 줄 씩 해석 하 는 방식 을 따 르 지 않 아 도 됩 니 다)
6.More expression-bodied members(더 많은 함수 구성원 의 표현 식 체)
C\#6.0 에 서 는 한 문장 만 있 는 방법 체 를 표현 식 으로 간략하게 쓸 수 있 도록 제공 합 니 다.
다음 과 같다.
public void CreateCaCheContext() => new CaCheContext();
//
public void CreateCaCheContext()
{
new CaCheContext();
}
그러나 구조 함수,분석 함수,속성 접근 기 는 지원 되 지 않 습 니 다.그러면 C\#7.0 은 지원 합 니 다.코드 는 다음 과 같 습 니 다.
//
public CaCheContext(string label) => this.Label = label;
//
~CaCheContext() => Console.Error.WriteLine("Finalized!");
private string label;
// Get/Set
public string Label
{
get => label;
set => this.label = value ?? "Default label";
}
7.throw 표현 식(이상 표현 식)C\#7.0 이전에 우 리 는 문자열 이 null 인지 아 닌 지 를 판단 하고 싶 습 니 다.null 이면 이상 을 제거 합 니 다.우 리 는 이렇게 써 야 합 니 다.
public string IsNull()
{
string a = null;
if (a == null)
{
throw new Exception(" !");
}
return a;
}
이렇게 하면 우 리 는 매우 불편 합 니 다.특히 3 원 표현 식 이나 비 어 있 는 표현 식 에서 이 이상 을 버 릴 수 없습니다.if 문 구 를 써 야 합 니 다.그러면 우 리 는 C\#7.0 에서 이렇게 할 수 있다.
public string IsNull()
{
string a = null;
return a ?? throw new Exception(" !");
}
8.Generalized async return types(일반적인 비동기 반환 형식)응,이 건 뭐 랄 까?사실 나 는 비동기 적 으로 사용 하 는 것 이 비교적 적기 때문에 이 느낌 에 대해 깊이 이해 하지 못 하 는 것 이 냐,아니면 연 합 란 이 라 고 생각 하 는 것 이 냐?특정한 상황 에서 유용 할 것 이다.
나 는 공식 원문 을 직접 번역 했다.인 스 턴 스 코드 도 공식 원문 이다.
비동기 방법 은 void,Task 또는 Task
공식 인 스 턴 스 는 하나의 데이터 가 캐 시 된 상태 에서 ValueTask 를 사용 하여 비동기 또는 동기 화 2 가지 방안 을 되 돌려 줄 수 있다 는 뜻 이다.
public class CaCheContext
{
public ValueTask<int> CachedFunc()
{
return (cache) ? new ValueTask<int>(cacheResult) : new ValueTask<int>(loadCache());
}
private bool cache = false;
private int cacheResult;
private async Task<int> loadCache()
{
// simulate async work:
await Task.Delay(5000);
cache = true;
cacheResult = 100;
return cacheResult;
}
}
호출 된 코드 와 결 과 는 다음 과 같 습 니 다.
//main async , .
static void Main(string[] args)
{
Action act = async () =>
{
CaCheContext cc = new CaCheContext();
int data = await cc.CachedFunc();
Console.WriteLine(data);
int data2 = await cc.CachedFunc();
Console.WriteLine(data2);
};
//
act();
Console.Read();
}
위의 코드 는 두 번 연속 호출 되 었 습 니 다.첫 번 째 는 5 초 동안 결과 가 나 오 기 를 기 다 렸 습 니 다.두 번 째 는 결과 가 예상 한 효과 와 일치 하 기 를 기다 리 지 않 았 습 니 다.9.숫자 문자 문법 개선(수치 문자 문법 개선)
이 건 순 전 히..보기 위해 서..
C\#7.0 에서 숫자 에''이 나타 날 수 있 도록 합 니 다.이 분할 기 호 는 가 독성 을 높 인 다.예 를 들 어 다음 과 같다.
int a = 123_456;
int b = 0xAB_CD_EF;
int c = 123456;
int d = 0xABCDEF;
Console.WriteLine(a==c);
Console.WriteLine(b==d);
// true, "_" ,
물론 숫자 형식의 구분자 라면 decimal,float,double 다 이렇게 갈 라 질 수 있어.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.