새로운 INumber 유형을 사용하여 .NET 7에서 수학 함수 생성
5509 단어 csharpdotnettutorialprogramming
이러한 개선 사항 중 작은 특정 항목은 정말 우아하며 더 나은 방법으로 숫자를 다루는 방법을 작성하는 데 도움이 될 수 있습니다. 바로 새
INumber<T>
인터페이스입니다.설정 🧰
이 기능은 아직 미리 보기 상태이므로 다음 코드를 실행하려면 .NET 7을 사용하여 새 프로젝트를 만들고 미리 보기 기능을 활성화해야 합니다.
내 콘솔 앱의
.csproj
는 다음과 같습니다.<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
</PropertyGroup>
</Project>
사용 사례 🔎
쇼핑 앱을 만들고 있고 카트를 확인하고 싶다고 상상해 봅시다. 현재 모든 가격 TTC는 어림수이므로 모두 합산하기 위해 다음과 같은 방법을 작성했습니다.
int CartValue(int[] numbers)
{
var result = 0;
foreach (var i in numbers) result += i;
return result;
}
나중에 장바구니의 가치를 계산하기 위해 로직에서 이를 사용합니다.
var prices = new[] { 1, 2, 3 };
var sum = CartValue(prices);
그리고 그것은 훌륭하게 작동합니다!
까지 ...
그것은 훌륭하게 작동했지만 이제 우리는 가격과 함께 합산해야 하는 배송 및 기타 세금도 가지고 있으며 우리의 방법은 더 이상 작동하지 않습니다.
var pricesWithTaxes = new[] { 1, 2, 3, 1.5 };
var sumWithTaxes = CartValue(pricesWithTaxes);
// ^ This is not an int[] and won't compile
이 문제를 해결하기 위해
CartValue
대신 double[]
를 수락하도록 int[]
메서드를 다시 작성한 다음 모든 숫자를 double
로 변환하고 싶은 유혹을 느낄 수 있지만 .NET 7을 사용할 수 있고 브랜드가 있음을 확인했습니다. 이를 위한 새로운 기능INumber 소개
이제부터 숫자는
INumber<T>
의 유형에 관계없이 숫자에 대한 0, 더하기, 1 등과 같은 기본 수학 개념을 노출하는 T
인터페이스를 구현합니다.우리의 경우, 이는
int
와 double
가 INumber
동일한 개념을 노출한다는 것을 의미합니다(동일한 값은 아니지만).모든 숫자의 배열을 받아들이도록 메서드를 다시 작성해 봅시다.
T CartValue<T>(T[] numbers)
where T : INumber<T> // <-- Don't forget the constraint!
{
var result = T.Zero;
foreach (var i in numbers) result += i;
return result;
}
제공된 배열이 숫자임을 지정하기 위해 제네릭을 사용하기만 하면 우리의 방법이 다시 훌륭하게 작동하고 이전 코드가 이제 컴파일됩니다!
.NET 7에는 이 인터페이스 외에도 훨씬 더 많은 것이 있습니다. Microsoft가 프레임워크의 다음 버전에 대해 작성한 .NET 7 미리 보기 블로그를 확인하는 것이 좋습니다.
소중한 것을 배웠기를 바라며 좋은 하루 되세요!
Reference
이 문제에 관하여(새로운 INumber 유형을 사용하여 .NET 7에서 수학 함수 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pbouillon/using-inumber-to-generify-math-function-in-net-7-30d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)