2017-09-21 18 views
-1

私はいくつかのカスタム属性でこのようなクラスを持っています。私は実際にこれらを実装する必要があるかどうかはわかりません。この方法は、一定の文字列表現を返しますstring ValueOrString(double x) 渡された数が等しい場合:クラスのカスタム属性によるプロパティを通した反復

[AttributeUsage(AttributeTargets.Field)] 
    private class IsValue : Attribute { } 
    [AttributeUsage(AttributeTargets.Field)] 
    private class IsRep : Attribute { } 
    [AttributeUsage(AttributeTargets.Class)] 
    private class IsConstant : Attribute { } 
    public static class Constants 
    { 
     [IsConstant] 
     public static class EulerGamma 
     { 
      [IsValue] 
      public const double Value = 0.5772156649015; 
      [IsRep] 
      public const string Str = "γ"; 
     } 
     [IsConstant] 
     public static class EulerNumber 
     { 
      [IsValue] 
      public const double Value = 2.718281828459; 
      [IsRep] 
      public const string Str = "e"; 
     } 
     [IsConstant] 
     public static class Pi 
     { 
      [IsValue] 
      public const double Value = 3.1415926535898; 
      [IsRep] 
      public const string Str = "π"; 
     } 
     [IsConstant] 
     public static class GoldenRatio 
     { 
      [IsValue] 
      public const double Value = 1.6180339887499; 
      [IsRep] 
      public const string Str = "φ"; 
     } 
    } 

のは、これは私はこのようなメソッドを実装したいのですが、いくつかのクラス「MyMathClass」、であるとしましょうそれ以外の場合は元の数値を返します。 だから、もし私が正確に3.1415926535898に合格すれば、このメソッドは私に文字列 "π"を与えます。 例2.5315621321を渡すと、これは私に "2.5315621321"(文字列)を返します。 私を助けてもらえますか?

答えて

1

私は辞書を使用するクラスを作成します。

public static class Constants 
{ 
    static Dictionary<double, string> constantNames; 

    static Constants() 
    { 
     Constants.constantNames = new Dictionary<double, string>(); 

     Constants.constantNames.Add(3.1415926535898, "π"); 
     Constants.constantNames.Add(2.718281828459, "e"); 
    } 

    public static string ValueOrString(double value) 
    { 
     if (constantNames.ContainsKey(value)) 
     { 
      return constantNames[value]; 
     } 
     else 
     { 
      return value.ToString(); 
     } 
    } 
} 

機能string ValueOrString(double value)が呼び出されたときに提供された値が辞書に存在する場合は、あなたがチェックすることができます。存在する場合は、そこから定数の名前を取得します。それ以外の場合は、値を文字列として返します。

+0

このアイデアのおかげで:-D私の構築はとてもダムだった、実際に私は単に "MyMath"クラスでこれらの定数名のプライベート静的リストを実装する:) –

関連する問題