2016-06-27 6 views
1

を持つプロパティを作成します。私はこのような何かをやろうとしている定義済みの値のリストC#

は、プロパティと値のいくつかのリストを作成します。

public class field_type 
{ 
    public static string NUMBER = "NUMBER"; 
    public static string VARCHAR = "VARCHAR"; 
    public static string BOOLEAN = "BOOLEAN"; 
    public static string DATE = "DATE"; 
} 

をし、別のプロパティの型としてそれを使用します:

List<field_definition> field_defs1 = new List<field_definition>(); 
field_defs1.Add(new field_definition 
{ 
    field_type = 

}); 

public class field_definition 
{ 
    public string field_name; 
    public string field_description; 
    public field_type field_type;     <-- this one 
    public string field_size; 
    public bool primary_key; 
    public bool auto_increment; 
    public bool unsigned; 
    public string default_value; 
    public bool can_be_null; 
} 

そして、このようにそれを使用します

ポイントは、等価記号intellisenseの後にスペースをヒットすると、VBAで起こるような、このプロパティの利用可能な値のリストが表示されます。

+1

ここで何を意味するのか分かりにくいです。 'field_type'は文字列ではなく' field_type'クラスのインスタンスしか保持できません。代わりにenumを探しているのではないでしょうか? –

答えて

1

なぜ列挙型を使用しないのですか?ちょうどあなたの興味のための

enum field_type { NUMBER, VARCHAR, BOOLEAN, DATE }; 
List<field_definition> field_defs1 = new List<field_definition>(); 
field_defs1.Add(new field_definition 
{ 
    field_type = field_type.NUMBER; 

}); 
+0

彼はどこに文字列が必要だと指定しましたか? – CiccioRocca

+0

私は自分自身が文字列であると思っています。私の提案は別のアプローチを使うことでした。これは、彼が必要とするものがStringであると指定していないからです。なぜこのすべての論争? – CiccioRocca

+0

本当に、私はあなたの答えを間違って読んで、私のコメントを消去しました。それはまだOPが求めている質問を正確に解決していません。 intellisense *はデフォルトで 'field_type'になりますが、使用可能な値が表示される前に' field_type.'を入力する必要があります。 OPは '='をタイプした後にその値が現れる可能性があるかどうかを尋ねています。 – InBetween

0

:あなたがオブジェクト名としてクラス名を使用しないでください。public field_type field_type;

ソリューション:

List<field_definition> field_defs1 = new List<field_definition>(); 
field_defs1.Add(new field_definition() 
{ 
    auto_increment= true, 
    field_name = "lala", ... etc 

}); 

は、あなただけのコンストラクタ呼び出しから丸括弧:)

を忘れてしまいました
+0

これはOPの質問にどのように答えますか? – InBetween

+1

OPの質問: "等価記号intellisenseの後にスペースを叩くのは、VBAで起こるような、このプロパティの利用可能な値のリストを私に示しているということですか? これは、構文が正しい場合に発生します。 –

+0

いいえ、そうではありません。 – InBetween

0

あなたのコードはこのようには動作しません。

field_type.NUMBERのように、field_typeクラスのプロパティにのみアクセスできます。 しかし、このプロパティは静的であるため、変更することはできません。

あなたは常にfield_typeクラスで自分の価値観と一致するタイプを保存したい場合は、私はあなたのコードがそのようになることを想定しています

このクラスは、あなたのfield_typeの異なる値、のみストアを格納します。

public static class field_type 
    { 
     public static string NUMBER = "NUMBER"; 
     public static string VARCHAR = "VARCHAR"; 
     public static string BOOLEAN = "BOOLEAN"; 
     public static string DATE = "DATE"; 
    } 

ここにあなたのfield_typeは文字列です:

public class field_definition 
    { 
     public string field_name; 
     public string field_description; 
     public string field_type; 
     public string field_size; 
     public bool primary_key; 
     public bool auto_increment; 
     public bool unsigned; 
     public string default_value; 
     public bool can_be_null; 
    } 

そして、あなたはこのようにそれを使用することができます:field_typeクラスで

List<field_definition> field_defs1 = new List<field_definition>(); 
     field_defs1.Add(new field_definition 
     { 
      field_type = field_type.NUMBER 
     }); 

それともfield_type=field_type.DATEまたは全部自分の価値観。

0

どこから始めますか?

field_type =と入力してスペースを空けたら、コンパイラは何を期待していますか?まあ、答えは...何でもあります。すべてのが有効なオプションは

field_type = null; 
field_type = new field_type(); 
field_type = myFieldTypeVariableDeclaredBeforeInMyCode; 
field_type = 1; 
field_type = dlñfjasfjoafja; 
field_type = field_type.NUMBER; 

:これらすべては有効なオプションです。明らかにいくつかはコンパイル時エラーです。

奇妙なことに、最後のオプションを希望しているようです:field_type = field_type.NUMBERこれは明らかに間違っています。あなたは違法な告発を促すようにインテリセンスに求めています。型付き変数field_typestringを割り当てます。

しかし、intellisenseがあなたの望むように動作しないようにする大きな問題があることを忘れてください。 NUMBER,BOOLEANなどは、field_typeクラス内でのみ意味を持つ名前です。クラス定義の外では何も意味しないので、は、という名前を修飾して、コンパイラがそれを否定することを保証する必要があります。どうやって? field_type.field_type = field_type.NUMBER;と入力します。今すぐfield_type.NUMBERは完全修飾されており、コンパイラはNUMBERが何であるかを理解することができます:文字列"NUMBER"

あなたは
コンパイラを field_type入力した後 . を打ったとき意志は喜んであなたのすべての利用可能なオプションを示していることがわかります。それは100%あなたに利用可能な他の可能なオプションがないことを今確信しているからです。

しかし、コンパイラがない任意の可能な値を持つプロンプト=を入力した後、それが次に来るものの推測を行うのに十分な情報を持っていないだろうbecuase:もう一度、これらすべてが有効です:

field_type = null; 
field_type = new field_type(); 
field_type = myFieldTypeVariableDeclaredBeforeInMyCode; 
field_type = field_type.//whatever; 

なぜそれを決定する必要がありますfield_type.が最適ですか?

ご希望の動作に最も近いのはenumsです。その場合、intellisenseは少なくとも、enum型にデフォルトします。チャンスは非常に高く、それは次に来るものです。

関連する問題