如何在带有属性设置的if语句中使用字符串?

时间:2018-07-31 16:45:45

标签: c# visual-studio winforms

我目前正在使用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:

enter image description here

这些是我要引用的变量。 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语句吗?

我真的希望我现在把事情弄清楚。

3 个答案:

答案 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)

编辑:新代码和屏幕

enter image description here

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

enter image description here