2011-11-10 10 views
4

これはenmusを使用する良いケースですか? 配列を使用する方が良いでしょうか? ここの値は年に1回と言われることはありません。これはEnumsの正しい使用ですか?

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

namespace ConsoleApplication1 
{ 

public enum transmission 
{ 
    Manual, 
    NonSynchronous, 
    Automatic, 
    SemiAutomatic, 
    Continuously, 
    Infinitely, 
    Electric, 
    Hydrostatic, 
    Hydrodynamic, 
} 

public enum bodystyle 
{ 
    Convertable, 
    Hatchback, 
    Sports, 
    Sedan 
} 
public enum carcolors 
{ 
    Red, 
    Blue, 
    Yellow, 
    White, 
    Black, 
    Green 
} 
public enum fueltype 
{ 
    Biofuels, 
    FossilFuels, 
    Nuclear, 
    Fission, 
    Fusion 
} 

public class Car 
{ 
     public Car(String cName, double cMaxSpeed, String cTransmission, String cBodystyle, String cColors, String cFueltype) { 
     carname = cName; 
     transmission = cTransmission; 
     bodystyle = cBodystyle; 
     colors = cColors; 
     fueltype = cFueltype; 
     maxspeed = cMaxSpeed; 
    } 
    public string carname 
    { 
     get; 
     set; 
    } 
    public string transmission 
    { 
     get; 
     private set; 
    } 
    public string bodystyle 
    { 
     get; 
     private set; 
    } 
    public string colors 
    { 
     get; 
     private set; 
    } 
    public string fueltype 
    { 
     get; 
     private set; 
    } 

    public void carInfo() 
    { 
     Console.WriteLine("------------------------------------"); 
     Console.WriteLine("Car Name:   " + this.carname); 
     Console.WriteLine("Car Transmission: " + this.transmission); 
     Console.WriteLine("Car Bodystyle: " + this.bodystyle); 
     Console.WriteLine("Car Colors:  " + this.colors); 
     Console.WriteLine("Car Fueltype:  " + this.fueltype); 
     Console.WriteLine("Car MaxSpeed:  " + this.maxspeed); 
     Console.WriteLine("------------------------------------"); 

    } 


} 

public class Program 
{ 
    static void Main(string[] args) 
    { 
     Car nissan = new Car("Lamborgini", 255, Convert.ToString(transmission.Automatic), Convert.ToString(bodystyle.Sports), Convert.ToString(carcolors.Red), Convert.ToString(fueltype.Biofuels)); 
     nissan.carInfo(); 
    } 
} 

} 
+0

タイトルをあなたの質問内容と一致させると、回答の質を向上させるのに役立ちます。タイトルは、これが正しい使用法であるかどうかを尋ねます。そうでない場合は、これが最善の行動と対話のリストかどうかを質問します。 –

答えて

4

あなたは、いくつかのEnumタイプを定義しているが、実際にそれらを使用していません。したがって、この点では、適切な使用法ではありません。

アレイを使用することについて - 私は列挙型に比べてその価値を見ません。

あなたのプロパティのタイプであるタイプEnumではなく、渡すタイプはすべてstringです。

適切な使用法は次のようになります。

public enum BodyStyle 
{ 
    Convertable, 
    Hatchback, 
    Sports, 
    Sedan 
} 

public class Car 
{ 
    public Car(String cName, BodyStyle cBodyStyle) 
    { 
    carname = cName; 
    this.BodyStyle = cBodyStyle; 
    } 


    public string carname 
    { 
     get; 
     set; 
    } 

    public BodyStyle BodyStyle 
    { 
     get; 
     private set; 
    } 
} 
+2

これはコメントではありませんか? –

+0

@PaulJackson:これはなぜコメントですか?それは短い答えですが、それは正しいです。 –

+0

@JamesJohnsonそれは答えではない、それは観測です。 –

2

問題は、彼らが再コンパイルが必要になる変更するために、なります。このアプリケーションには他に何が関係していますか?これらの値をデータベースに保存できますか?これにより、アプリケーションをより簡単に更新できるようになり、アプリケーションを再コンパイルすることなく実行できます。

+1

別の見解については、http://thedailywtf.com/Articles/Soft_Coding.aspx – dsolimano

+0

私はその記事を読んだと思います。 "ソフトコーディング地獄"。確かに、どこにでもデータ定義を広めることで、完璧に読みやすいプログラムを台無しにすることができます。しかし、DBや設定ファイルをすばやく更新すると、コードをコンパイルして環境に配備するのが面倒になることがあります。 – kevingreen

+0

確かに。しかし、面倒なことに、私はコードリリースと同じ深刻さとQAでそれを取っていないときに、DBへの素早いアップデートで多くの環境を混乱させました。 – dsolimano

0

問題は、コードを変更、コンパイル、テスト、リリースする必要がある場合です。私は何かが変わる可能性がある場合は、それをどこかに保存することをお勧めします。実行時にデータベースや設定ファイルなどの設定が可能です。

0

いいえ、私は彼らがこのように表現しなければならない列挙型を持つプロパティを宣言します:

public transmission transmission { get; private set; } 
0

、あなたのコード内で列挙型を使用しているように見えるしません。プロパティの種類は、あなたが作成した列挙型に対応する必要があります:

public bodystyle BodyStyle { get; set; } 
0

あなたが列挙されている列挙型は、本当に多くのデータとして適している、そのようにロードされている(配列、辞書などに)。

enumの利点は実際には数値なので、値のいずれかに対して明示的なテストが必要な場合は、TTテンプレートを使用してデータから列挙型を生成する必要があります。

基本的に彼らは(テストすなわち。値)を使用されていない場合は、プログラムで、その後、彼らは本当に、おそらく列挙型ではありません:)

0

私はそうは思いません。

あなたはEnumとは対照的です。私は整数定数の一種としてEnumを考える。特定の文字列に変換するだけのオブジェクトとして使用しています。

0

なぜ列挙型を宣言しているのかわかりませんが、列挙型のコンポーネントのみを使用しています。このような状況では、文字列の配列を使用することもできます。

あなたは(はい、この状況が適切である)列挙型を使用したい場合は、あなたができる:

public Car(String cName, double cMaxSpeed, transmission cTransmission, bodystyle cBodystyle, carcolors cColors, fueltype cFueltype) { 
     carname = cName; 
     transmission = cTransmission; 
     bodystyle = cBodystyle; 
     colors = cColors; 
     fueltype = cFueltype; 
     maxspeed = cMaxSpeed; 
    } 

    public transmission transmission 
    { 
     get; 
     private set; 
    } 
    public bodystyle bodystyle 
    { 
     get; 
     private set; 
    } 
    public carcolors colors 
    { 
     get; 
     private set; 
    } 
    public fueltype fueltype 
    { 
     get; 
     private set; 
    } 

なく、あなたのコードの完全な変更が、私はあなたのアイデアを得ると思います。列挙型に変換するだけでは、列挙型の宣言には何の意味もありません。列挙型のままにしておきます。それらをコンストラクタに渡し、宣言した列挙型として保存します。

関連する問題