我目前正在使用Winforms C#。我有一个字符串“ Flippo1SN”,并且该字符串由我的表单确定。 “ Flippo1SN”可以在与“ Properties.Settings ”中相同的 name 匹配的“序列号名称” 中进行更改。 属性。设置中的序列号值为整数。我想使用 if语句,而不汇总我的 Properties.Settings 中的所有 integers ,而是使用字符串,这样我就可以在1个 if语句中编写代码,而不是更多。我试图使用这样的代码:
if (Properties.Settings.Default.Flippo1SN == 0) {}
您可能已经猜到了,这没有用。我尝试了以下更多方法:
if (Properties.Settings.Default.(Flippo1SN) == 0) {}
if (Properties.Settings.Default.("Flippo1SN") == 0) {}
if (Properties.Settings.Default.[Flippo1SN] == 0) {}
if (Properties.Settings.Default.["Flippo1SN"] == 0) {}
给我一个错误,说期望有一个标识符。 我该如何解决?过去可能已经有人问过这个问题,但我找不到。 预先感谢。
编辑1:
Flippo1SN 在Properties.Settings中不存在,而是它的值。它的值类似于:GF01,GF02,...我正在尝试引用它们。
编辑2:
这些是我要引用的变量。 Flippo1SN 的名称更改为 GF01 或 GF02 等。我不想输入这样的代码:
if (Flippo1SN == "GF01")
{
if (Properties.Settings.Default.GF01 == 0) {//Do action}
}
相反,我想在第二个if语句中使用 Flippo1SN 立即引用 GF01 。因为我在 Properties.Settings 中有很多 Integers ,所以这会花费我很多时间和写作。 编辑3
我将解释我正在创建的内容,以便你们了解我在做什么。
我正在创建一个“收集游戏”,您可以在其中收集Flippos(我猜是英语叫Pogs还是牛奶瓶盖?)。要获得这些Flippos,您可以打开一个礼物盒并获得3个随机Flippos。输出是这样的: Screenshot(“ Verzamel”表示收集) 在此图像中,您看到3个活页夹。在左上角,您可以看到每个翻盖的序列号(MF06,GF16,OF12)。 “ MF”代表“ Mega Flippo”,“ GF”代表Green Flippo,“ OF”代表“ Orange Flippo”。
在代码中,我使用了随机数来选择哪一个(绿色概率为50%,橙色概率为30%,兆像素概率为20%。百分比由特定组的数量决定)。我的代码中也有3个字符串,其中包含这些翻盖的序列号(Flippo1SN,Flippo2SN和Flippo3SN)。这些序列号是指我数据库中的序列号(或仅是properties.settings选项卡)。在这种情况下,MF06,GF16和OF12递增1。
现在,我想检查一下您是否收到了以前没有的挂机。如果这样做,标签将出现在图片上方,并且该标签的文本将为“新建”。
为此,我首先需要检查您收到的是哪一个,然后检查您的数据库中是否已经有那个。第一个if检查您是否已收到GF01,第二个if检查您是否已收到GF01:
if (Flippo1SN == "GF01")
{
if (Properties.Settings.Default.GF01 == 0)
{
label1.Show();
}
}
else if (FLippo1SN == "GF02") {//ETC}
Flippo1SN已经确定。我没有尝试更改Flippo1SNs的值。我只是使用此字符串来检查您收到了哪个翻录。所有的活页夹都有序列号,而Flippo1SN保留有一个序列号,用于引用您收到的那个活页夹。
我现在要问的是,有没有更快速的方法来做到这一点?我不能在if语句中立即使用Flippo1SN的值,这样可以避免使用多个if语句吗?
我真的希望我现在把事情弄清楚。
答案 0 :(得分:1)
首先,您必须检查它是否存在,然后您可以对它进行任何操作:
if(Properties.Settings.Default.ContainsKey(Flippo1SN))
{
if(Properties.Settings.Default[Flippo1SN] == 0)
{
// ....
}
}
您还可以编写处理程序以摆脱if检查:
interface ISettingsHandler
{
void Handle(int value);
bool CanHandle(string name);
}
class GF1Handler : ISettingsHandler
{
public void Handle(int value){
// do action
}
public bool CanHandle(string propertyName){
return propertyName.Equals("GF1");
}
}
class GF2Handler : ISettingsHandler
{
public void Handle(int value){
// do action
}
public bool CanHandle(string propertyName){
return propertyName.Equals("GF2");
}
}
然后,您可以初始化处理程序列表,并使用可以处理所选属性的处理程序列表:
var handler = listOfHandler.FirstOrDefault(h => h.CanHandle(Flippo1SN))
if( != null)
handler.Handle(Properties.Settings.Default[Flippo1SN]);
答案 1 :(得分:1)
通过使用Properties.Settings.Default
,您可以检索Project
中的所有属性。
然后,通过遍历它们,您可以检查每个属性的Name
,以查看其是否与您的Flippo1SN
匹配,如下所示:
string Flippo1SN = "GF02";
var props = Properties.Settings.Default;
foreach(var prop in props.Properties)
{
var settingProperty = (SettingsProperty)prop;
if (settingProperty.Name == Flippo1SN)
{
// Now you found the property that matches Flippo1SN.
// Get its value.
var value = settingProperty.DefaultValue;
}
}
如何检查属性值是否为零:
string Flippo1SN = "GF02";
foreach (SettingsProperty prop in Properties.Settings.Default.Properties)
{
if (prop.Name == Flippo1SN)
{
if (int.TryParse(prop.DefaultValue.ToString(), out int result))
{
if (result == 0)
{
// The value is zero.
}
}
}
}
答案 2 :(得分:0)
编辑:新代码和屏幕
using System;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
dynamic props = Properties.Settings.Default;
string Flippo1SN = "200";
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string output = "Properties.Settings.Default.test : ";
if (Flippo1SN == props.test.ToString())
{
output += $"{props.test}";
}
if (Flippo1SN == props.test2.ToString())
{
output += $"{props.test2}";
}
if (Flippo1SN == props.test3.ToString())
{
output += $"{props.test3}";
}
MessageBox.Show(output);
}
}
}