windowsphone 7-如何最好地表示C#中的表单字段
本文关键字:表单 字段 表示 何最好 地表 windowsphone | 更新日期: 2023-09-27 18:00:36
我开始学习C#for WP7,我正在制作一个应用程序来抓取各种网站,并在页面上显示一些信息。
我将允许用户在手机上创建多个"帐户"——每个帐户都是特定网站的一组登录详细信息。例如,如果我使用stackoverflow作为例子,我会有一个类:
public abstract class MyBaseClass
{
public Dictionary<string, string> fields;
}
public class StackOverflow : MyBaseClass
{
public StackOverflow()
{
fields.Add("Username", "Default Username");
fields.Add("Password", "");
}
}
这个课程将完成所有的工作,我希望人们能够提交新的课程,以便在以后的版本中包含。
应用程序将遍历每个字段,向用户显示适当的表单字段。一旦完成,UI将更新字典,准备开始抓取。
一开始使用字典似乎还可以,但我没有想过如何表示数据类型——我想定义输入应该是文本、数字还是密码。
如何最好地包含这些数据?
鉴于屏幕截图往好里说是糟糕的,往坏里说是灾难性的,我必须建议您只包括提供公共文档API的站点(或服务ecs),然后使用该引用来定义您存储的数据类型。
也就是说,如果您使用的是C#/.NET 4,您可能希望使用Tuple数据类型。
使用此模式需要记住的一点是,您对该对象所做的几乎所有操作都基于"魔术串"。字符串数据很少可以在编译时进行检查;作为字符串引用的字段名可能存在拼写错误,编译器会立即发现该错误;类似地,将"ABC123"设置为一个本应是十进制的字段也很好,直到您尝试解析它为止。
如果你决定走这条路,我会把Dictionary改为一个自定义类的List,其中包含该字段的所有元数据;它的名称、类型、当前值等。列表应该受到保护,并通过从MyBaseClass类派生的类上的一个或多个索引器访问,该类可以根据情况根据索引位置或字段名称提取数据。
请注意,在更改为List时,天真的实现将导致字段的线性搜索时间,而Dictionary则为您提供对数访问时间。您可以通过对列表进行排序并实现BinarySearch来查找字段名称来减轻这种情况。
您必须创建自己的模型来表示这一点。只要做自然的、有意义的事。这个怎么样:
public enum InputType
{
Text,
Number,
Password
}
public class Value
{
public object Value { get; set;}
public InputType InputType { get; set;}
}
public abstract class MyBaseClass
{
public Dictionary<string, Value> fields;
}
public class StackOverflow : MyBaseClass
{
public StackOverflow()
{
fields.Add("Username", new Value() {
Value = "Default Username",
InputType = InputType.Text
});
fields.Add("Password", new Value() {
Value = "hw78fksm9",
InputType = InputType.Password
});
}
}
顺便说一句,不要将MyBaseClass
的fields
变量公开,这是一个实现细节,应该隐藏/封装!