使用预定义的值列表C#创建属性

时间:2016-06-27 08:37:06

标签: c# class properties

我正在尝试做这样的事情:

创建一些属性和值列表:

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

然后将其用作另一个属性的类型:

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;
}

然后像这样使用它:

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

});

关键是当我在等号符号intellisense向我显示此属性的可用值列表之后命中空格时,就像它在VBA中发生一样,是否可能?

4 个答案:

答案 0 :(得分: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;

});

答案 1 :(得分: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

});

你刚忘记了构造函数调用中的圆括号:)

答案 2 :(得分:0)

你的代码不会像这样工作。

您只能访问field_type类的属性,例如field_type.NUMBER。 但是你确切地说这个属性是静态的,所以你不能改变它们。

如果你想存储一个总是匹配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;
    }

你可以像这样使用它:

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或您在field_type类中的所有值。

答案 3 :(得分: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这显然是错误的。你问intellisense会提示你非法的分配;将string分配给field_type类型变量。

但是忘记了,有一个更大的问题阻止智能感知以你想要的方式表现。 NUMBERBOOLEAN等是仅在课程field_type中有意义的名称。在类定义之外它们没有任何意义,因此您需要限定名称以确保编译器对其进行处理。怎么样?输入field_type.field_type = field_type.NUMBER;。现在field_type.NUMBER是完全限定的,编译器可以理解NUMBER是什么:字符串"NUMBER"

请注意,当您在输入.后点击field_type 时,编译器高兴地向您显示所有可用选项。这是因为它现在100%确定没有其他可用的选项。

但是,在输入=后,编译器将提示您输入任何可能的值,因为它没有足够的信息来对接下来的内容进行有根据的猜测:所有这些是合法的:

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

为什么决定field_type.是最佳选择?

您最接近所需行为的方法是使用enums。在这种情况下,intellisense至少会默认为枚举类型,因为机会非常高,这正是接下来的内容。