我正在尝试做这样的事情:
创建一些属性和值列表:
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中发生一样,是否可能?
答案 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
类型变量。
但是忘记了,有一个更大的问题阻止智能感知以你想要的方式表现。 NUMBER
,BOOLEAN
等是仅在课程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至少会默认为枚举类型,因为机会非常高,这正是接下来的内容。