2017-11-22 1 views
0

"사용자 지정"3D 좌표를 전달하는 응용 프로그램이 있습니다. 좌표는 절대 또는 상대 일 수 있습니다.C#의 인수를 통해 전달할 수있는 사용자 지정 숫자 접미사

필자는 값을 포함하는 다차원 배열과 값이 상대적인지 절대인지에 대한 부울 값을 갖지 않고 각 값 x, y, z에 대해이를 표현하는 빠른 방법에 대해 생각 해왔다.

내가 피하기 위해 노력하고있어의

예 : 내가 사용하고 생각하는 방법의

Coordinate c = new Coordinate({100.0,true},{25.0,false},{100.0,true}): 

하나를 사용자 정의하는 대신 기존 리터럴을 제외하고 100.0F처럼, 리터럴, 같은 소수 기반 연산자를 사용하여 절대 값은 100.0A이고 Coordinate 클래스와 관련된 상대 값은 100.0R입니다. 이것이 가능한가?

내 목표 예

:

public void SomeMethod(Coordinate 50.0R, Coordinate 25.0A, Coordinate 50.0R) 
{ 
    //... 
} 

이 단지 수없는 경우 또는, 그들은 절대 또는 상대하는 경우에 같은 추가 지표와 진수를 기반으로 번호를 전달하는 다른 비 투박한 방법이 무엇입니까?

답변

2

새로운 ValueTuple은 당신이 달성하려고하는 것을 표현하는 정말 깨끗한 구문을 제공한다.

튜플은보다 직관적 인 구문을 제공합니다.

using System; 

namespace test 
{ 
    class Program 
    { 
     public class Coordinate 
     { 
      public Coordinate((double Value, bool IsRelative) x, (double Value, bool IsRelative) y, (double Value, bool IsRelative) z) 
      { 
       X = x; 
       Y = y; 
       Z = z; 
      } 
      public (double Value, bool IsRelative) X { get; } 
      public (double Value, bool IsRelative) Y { get; } 
      public (double Value, bool IsRelative) Z { get; } 

      public override string ToString() 
      { 
       return $"({X},{Y},{Z})"; 
      } 
     } 

     public static void SomeMethod(Coordinate coordinate) 
     { 
      Console.WriteLine(coordinate); 
      Console.WriteLine(coordinate.X.Value); 
      Console.WriteLine(coordinate.Y.IsRelative); 
     } 

     public static void Main() 
     { 
      var c = new Coordinate((100.0, true), (25.5, false), (100, true)); 
      SomeMethod(c); 
      Console.ReadKey(); 
     } 
    } 
} 

당신은 값의 상대 또는 절대의 혼합이 될 수 있기 때문에 내 경우 작동하지 않을 것 ValueTuple nuget 패키지 & C의 # 7

+0

이것은 매우 유망한 가능성처럼 보입니다. 나는 그것을 밖으로 시도 할 것이다. –

+0

또한이 생성자를 사용하여 다차원 좌표계를 만들 수 있습니다. –

+0

이 구현을 시도한 결과,이 생성자는 'public Coordinate (params (double value, bool IsRelative) [] args)'연산자를 사용할 수 있습니다. 위대한 작품과 매우 "경량"쓰기를 느낍니다. 감사! –

1

C#에서 고유 한 사용자 정의 접미어를 정의 할 수 없습니다.

var location = Coordinate.Relative(100.0, 25.0, 100.0); 
var target = Coordinate.Absolute(100.0, 25.0, 100.0); 

또한 생성자를 만들 수 있습니다 : 내가 가장 일반적인 사용 사례가 가진 것 중 하나는 모두 상대 좌표, 또는 전부가 절대 좌표, 왜되지 않은 경우의 Coordinate 클래스에 두 개의 정적 메서드를 정의한다고 가정 할 오히려 배열보다 크기의 고정 된 수를 가지고 :

var location = new Coordinate(100.0, true, 25.0, false, 100.0, true); 
+0

첫 번째 대답을해야합니까. 두 번째 대답은 작동 할 수 있지만이 질문을 열어두고 다른 개념을 얻을 수 있는지 확인합니다. –

관련 문제