我在桌面应用程序上工作了一段时间后离开了应用程序开发世界,我正在使用我的C#而不是使用VB。是现代化的时候了,所以请原谅我在答案中缺乏概念知识。在最后一天冲浪SOF,并发现你不能像我们在VB6中那样使用全局变量数组。它指定使用列表。目标是创建一个类列表,并添加/更新值。
我做了一些搜索,并找到了一些很好的例子,并且已经走得很远,但是我开始关注黄色灯泡的方式太多了。现在我准卡住了。不是说我没有得到它,但我需要知道如何在列表中引用特定值。
例如:
public class WSettings
{
public string SettingName { get; set; }
public string SettingVal { get; set; }
public static void Main()
{
List<WSettings> wSettings = new List<WSettings>();
wSettings.Add(new WSettings { SettingName = "Port", SettingVal = "8080" });
wSettings.Add(new WSettings { SettingName = "UpdateInterval", SettingVal = "60" });
wSettings.Add(new WSettings { SettingName = "Baud", SettingVal = "9600" });
wSettings.Add(new WSettings { SettingName = "bits", SettingVal = "8" });
wSettings.Add(new WSettings { SettingName = "stopbits", SettingVal = "1" });
wSettings.Add(new WSettings { SettingName = "parity", SettingVal = "no" });
}
}
我开始在这里。但是说我想更新&#34; Port&#34;为了#34; 8181&#34;,我需要创建一个快速功能来完成它,所以我可以从应用程序的不同部分调用它。
public string GetSettingValByName()
{
return wSetting.SettingName("Port").SettingValue;
}
public void SetValueByName(string settingvalue, string SettingName)
{
wSetting.Settingvalue("Port") = settingvalue;
}
问题是我在这些示例中如何通过Settingval
引用SettingName
?我发布的代码我知道不起作用,但我猜这是接近应该怎么做。我正在寻找有关如何使用字符串&#34; Port&#34;进行查询的具体代码,例如.. GetValueByName("Port")
返回&#34; 8080&#34;的SettingVal
。或者设置&#34; Port&#34;的值。
接下来的问题,我正在读一些关于某个类是否具体成为列表,然后将其作为列表...或集合,例如..
public class AppName1: List<Wsettings>
如果是这种情况,是否有人有一个非常具体的例子,我可以跟随它来构建我正在寻找的东西?
全部谢谢
答案 0 :(得分:2)
您可以使用Dictionary通过键(SettingName)查找值。但是,我不认为这是最好的方法。您可能不希望通过魔术字符串引用所有设置。此外,通过将整数值存储为整数而不是字符串,您将受益。布尔值应存储为布尔值等。
我会在Main所在的单独文件中创建一个新类。
CommunicationSettings.cs
namespace MyNameSpace
{
class CommunicationSettings
{
public int Port;
public int UpdateInterval;
public int BaudRate;
public int Bits;
public int StopBits;
public bool Parity;
}
}
在ProgramName.cs
中namespace MyNameSpace
{
class Program
{
static void Main()
{
CommunicationSettings communicationSettings = new CommunicationSettings();
communicationSettings.Port = 8081;
//repeat for all settings
}
}
}
您还可以按如下方式封装值:
class CommunicationSettings
{
private int port;
private int updateInterval;
private int baudRate;
private int bits;
private int stopBits;
private bool parity;
public int Port { get { return port; } set { port = value; } }
public int UpdateInterval { get { return updateInterval; } set { updateInterval = value; } }
public int BaudRate { get { return baudRate; } set { baudRate = value; } }
public int Bits { get { return bits; } set { bits = value; } }
public int StopBits { get { return stopBits; } set { stopBits = value; } }
public bool Parity { get { return parity; } set { parity = value; } }
}
要在应用程序的其他部分使用它,您需要将该类的实例传递给使用它的其他类。
如果您的应用程序中只有这些设置的副本,请考虑使用单一模式,如下所示
class CommunicationSettings
{
private int port;
private int updateInterval;
private int baudRate;
private int bits;
private int stopBits;
private bool parity;
public int Port { get { return port; } set { port = value; } }
public int UpdateInterval { get { return updateInterval; } set { updateInterval = value; } }
public int BaudRate { get { return baudRate; } set { baudRate = value; } }
public int Bits { get { return bits; } set { bits = value; } }
public int StopBits { get { return stopBits; } set { stopBits = value; } }
public bool Parity { get { return parity; } set { parity = value; } }
static CommunicationSettings _TheSettings = null;
public static CommunicationSettings TheSettings
{
get
{
if (_TheSettings == null)
{
_TheSettings = new CommunicationSettings();
}
return _TheSettings;
}
}
}
现在你可以在代码的其他部分使用它。
CommunicationSettings settings = CommunicationSettings.TheSettings;
settings.Port = 8081;
答案 1 :(得分:1)
看起来你正在处理键/值对。对于这种类型的数据,请考虑使用Dictionary
,因为它已经具有您正在寻找的许多功能。
class Program
{
static Dictionary<string, string> settings = new Dictionary<string, string>();
static void Main()
{
settings["Port"] = "8080";
settings["UpdateInterval"] = "60";
settings["Baud"] = "9600";
settings["bits"] = "8";
settings["stopbits"] = "1";
settings["parity"] = "no";
// Update a setting
settings["Port"] = "8081";
}
}
答案 2 :(得分:1)
SetPort将如下所示(假设只有一个名称为“Port”的设置:
public void SetPort(string value)
{
wSettings.Single(x=>x.SettingName=="Port").SettingVal = value;
}
此外,如果您正在处理密钥唯一的密钥值对,请考虑使用Dictionary 与list相比,它更快。