2013-02-07 42 views
4

我已經創建了一個類來處理C#中的單位轉換。它不工作,因爲它只應該返回字符串。你可以使用Enum for Double變量嗎?

下面是類:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace RestaurantManagementSystem 
{ 
    class unitHandler 
    { 
     public enum Units 
     { 
      Grams = 1, 
      KiloGrams = 0.001, 
      Milligram = 1000, 
      Pounds = 0.00220462, 
      Ounces = 0.035274, 
      Tonnes = 0.000001, 

      Litres = 1, 
      Millilitres = 1000, 
      Cups = 4.22675, 
      FluidOunces = 33.814, 
      TeaSpoon = 202.884, 
      TableSpoon = 67.628, 
      CubicFeet = 0.0353147, 
      CubicInch = 61.0237, 
      CubicCentimetres = 0.0001, 
      CubicMetres = 0.001 

     } 

     public double Convert_Value(Units from, Units to, double quantity) 
     { 
      double converted_quantity = 0; 

      double fromValue = quantity * Convert.ToDouble(from.ToString()); 

      converted_quantity = fromValue * Convert.ToDouble(to.ToString()); 

      return converted_quantity; 
     } 
    } 
} 

我會以某種方式要枚舉類型以包含的每個單元的轉換系數的雙值,則使用它們進行轉換並返回轉換量。

+0

沒有,但你可以解釋整數點數。 – leppie

回答

11

不,enum的默認類型是intlong,並且無法使用分數。您可以使用枚舉的struct或類這一翻譯雙

public struct Units 
{ 
     public const double Grams = 1; 
     public const double KiloGrams = 0.001; 
     public const double Milligram = 1000; 
     public const double Pounds = 0.00220462; 
     public const double Ounces = 0.035274; 
     public const double Tonnes = 0.000001; 
     // Add Remaining units/values 
} 

而且使用它像

double d = Units.KiloGrams; 
+0

這段代碼很混亂......(編輯之後,它仍然沒有任何意義!) – leppie

+4

至少使用帶有常量的靜態類。 –

0

你不能使用枚舉與雙打。

我試着到Visual Studio給這個:您只能intlong

2

都能跟得上使用它

public enum Test : double 
{ 
    Hello, World 
} 

它說:

類型字節,爲sbyte,短,ushort,int,uint,long,or ulong expected

3

不能使用浮點/雙精度與枚舉。你可能不得不定義常量。

public const double KiloGrams = 0.001; 
1

可以使用手前BitConverter.DoubleToInt64Bits(double)方法轉換doublelong和他們硬編碼與後盾long類型的枚舉。然後你必須將枚舉值轉換回double

這可能比它的價值更麻煩。

1

對不起,不能做。枚舉是嚴格整數/字節。真的,他們應該是他們自己的類型。

你可以試試:

enum Units() { 
    Grams , 
    KiloGrams , 
    Milligram 
} 

public function GetUnitsFloatValue(Units unit) : float 
{ 
    switch (unit) 
    { 
     case Units.Grams : 
      return 1; 
     case Units.KiloGrams : 
      return 0.001; 
     case Units.MilliGrams: 
      return 1000;   
    } 

    //unhandled unit? 
    return 0; 
} 
相關問題