-4

i have big list of string like

actually im using binary Writer

            case btn_click:
                BinaryWriter bw = new BinaryWriter(File.OpenWrite(theFiles));

                for (int i = 0x000004; i <= 0x000005; i++)
                {
                    bw.BaseStream.Position = 0x000004;
                    string cmp = spn1.SelectedItem.ToString();
                    if (cmp == "A") bw.Write(0x0123);
                    if (cmp == "B") bw.Write(0x0456);
                    if (cmp == "C") bw.Write(0x0789);
                }

                for (int i = 0x000008; i <= 0x000009; i++)
                {
                    bw.BaseStream.Position = 0x000008;
                    string cmp = spn2.SelectedItem.ToString();
                    if (cmp == "A") bw.Write(0x0123);
                    if (cmp == "B") bw.Write(0x0456);
                    if (cmp == "C") bw.Write(0x0789);
                }
                for (int i ...
                {
                    ...
                }
...

how to avoid write repeat of string a, b , c ?

so by an answer by @Olexiy Dymashok i can solve the problem ^^ im put string cmp at public

public string cmp { get; private set; }

     for (int i = 0x000004; i <= 0x000005; i++)
                {
                    bw.BaseStream.Position = 0x000004;
                    cmp = spn1.SelectedItem.ToString();
                    bw.Write(SelectDataForBinaryWriter("ListData"));
                }

     for (int i = 0x000004; i <= 0x000005; i++)
                {
                    bw.BaseStream.Position = 0x000004;
                    cmp = spn2.SelectedItem.ToString();
                    bw.Write(SelectDataForBinaryWriter("ListData"));
                }

    private int SelectDataForBinaryWriter(string input)
    {
        int output = 0;
        if (cmp == "A") output = 0x0000;
        if (cmp == "B") output = 0x0123;
        if (cmp == "C") output = 0x0456;
        return output;
    }

thanks you

Blak RUSH
  • 9
  • 1
  • 5

2 Answers2

0

You could create a static class containing a, b and c as constant fields.

public static class Arbitrary
{
    public const string A = "test";
    ...
}
rufer7
  • 3,369
  • 3
  • 22
  • 28
0

If those strings are the same for all the cases - make them global:

string a = "test";
string b = "try";
string c = "compare";
//case 1
for (int i = 1; i <= 2; i++)
{
     if (a == b) { do something };
     if (a == c) { do something};
 }
 //case 2
 for (int i = 3; i <= 4; i++)
{
     if (a == b) { do something };
     if (a == c) { do something};
}

Doing this you will avoid repeating initializing this strings in every case

Edit 1

you can create function to select values:

for (int i = 1; i <= 2; i++)
{
     bw.Write(SelectDataForBinaryWriter("A"));
}
...
private int SelectDataForBinaryWriter(string input)
{
    int output = 0;
    switch (input) // edit your own cases here
    {
        case "A":
            output = 0x123;
            break;
        case "B":
            output = 0x456;
            break;
        case "C":
            output = 0x789;
            break;
        default:
            output = some_default_value_here;
            break;
    }

    return output;
}

As I can see, you are writing hex values, so you can also consider returning already parsed value - C# convert integer to hex and back again

Community
  • 1
  • 1