Dario D. Goddin
Dario D. Goddin

Reputation: 45

c# IndexOf does not exist in current context

I'm trying to use the following and can't wrap my head around why this IndexOf method isn't working.

foreach (string s in regKey.GetSubKeyNames())
        {
            RegistryKey sub = Registry.LocalMachine.OpenSubKey(string.Format(@"{0}\{1}", _UninstallKey64Bit, s), false);

            if (sub.ValueCount > 0)
            {
                values = sub.GetValueNames();

                if (IndexOf(values, "DisplayName")  != -1)
                {
                    string name = (sub.GetValue("DisplayName") != null) ? sub.GetValue("DisplayName").ToString() : string.Empty;

                    if (!string.IsNullOrEmpty(name) && (name.ToLower() == appName.ToLower()))
                        if (IndexOf(values, "UninstallString") != -1)
                        {
                            uninstallValue = (sub.GetValue("UninstallString") != null) ? sub.GetValue("UninstallString").ToString() : string.Empty;
                            break;
                        }
                }
            }
        }

Can anyone lend me a hand with this?

Upvotes: 0

Views: 7093

Answers (5)

brain
brain

Reputation: 2517

Try this instead of just IndexOf.

Array.IndexOf(values, "DisplayName")

Upvotes: 1

ipr101
ipr101

Reputation: 24236

Try changing -

if (IndexOf(values, "UninstallString") != -1)

to

if (Array.IndexOf(values, "UninstallString") != -1)

Upvotes: 1

Andrei
Andrei

Reputation: 56688

Correct syntax is:

if (Array.IndexOf(values, "DisplayName")  != -1)

Upvotes: 6

Bala R
Bala R

Reputation: 108957

Try

 if (values.Any(v => v == "DisplayName")) )
 {
    ...
 }

Upvotes: 3

BrokenGlass
BrokenGlass

Reputation: 160912

GetValueNames() returns a string array so you probably are looking for:

if (values.Contains("DisplayName"))

Upvotes: 4

Related Questions