Поиск, если класс содержит определенное свойство - PullRequest
2 голосов
/ 12 марта 2019

У меня есть файл настроек в моем проекте, который содержит несколько StringCollection (один для пользователя). Каждый StringCollection именуется именем пользователя и содержит одно или несколько значений для этого пользователя. Например, если пользователь имеет имя «User1», настройки будут содержать это:

<setting name="User1" serializeAs="Xml">
    <value>
        <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <string>mail1@test.com</string>
            <string>mail2@test.com</string>
        </ArrayOfString>
    </value>
</setting>

Я хочу проверить, есть ли в моих настройках определенный пользователь, т. Е. Я хочу знать, есть ли у класса Properties.Settings.Default свойство, названное как этот пользователь. Как я могу это сделать?

Если мой вопрос неясен, я хочу что-то вроде этого:

private bool UserExists(String user)
{
    // Test if a property in Properties.Settings.Default is named "user"
}

В моем случае у меня есть поле Properties.Settings.Default.User1. Так что UserExists("User1") должно быть True и UserExists("User2") должно быть False

Ответы [ 3 ]

2 голосов
/ 12 марта 2019

Вы можете загрузить настройки как StringCollection и вызвать Contains() в коллекции, чтобы определить, существует ваш пользователь или нет

Пример

private bool UserExists(String user)
{
    // Test if a StringCollection is named "user"
    return Properties.Settings.Default.User1.Contains(user);
}

РЕДАКТИРОВАТЬ

То, что вы пытаетесь сделать, это найти, если настройки существуют или нет, для этого вы можете попробовать что-то вроде этого

private bool UserExist(string user)
{
   return Properties.Settings.Default.Properties.Cast<SettingsProperty>().Any(prop => prop.Name == user);
}
0 голосов
/ 12 марта 2019

Ваш вопрос неясен, и ваше разъяснение запутывает проблему.Ваш заголовок «Поиск, если строковый файл содержит поле», тогда вы заявляете, что хотите увидеть, содержат ли ваши настройки определенного пользователя, в то время как ваши пояснения указывают на то, что вы хотите назвать коллекцию?Поскольку первый и последний элементы в этом списке не имеют особого смысла, я отвечу на второй.

Согласно документации MSDN для StringCollection метод расширения .Contains() делает точното, что вы, похоже, ищете.

Вот модифицированная версия документированного примера, которая немного больше соответствует вашему вопросу.

using System;
using System.Collections;
using System.Collections.Specialized;

public class SamplesStringCollection
{
    public static void Main()
    {
        // Creates and initializes a new StringCollection.
        StringCollection myCol = new StringCollection
        {
            "mail1@gmail.com",
            "mail2@gmail.com",
            "mail3@gmail.com",
            "mail4@gmail.com"
        };

        if (UserExists(myCol, "mail2@gmail.com"))
        {
            Console.WriteLine("User 2 exists!");
        }
    }

    private static bool UserExists(IList myCol, string user)
    {
        return myCol.Contains(user);
    }
}
0 голосов
/ 12 марта 2019

Или вы ищете что-то подобное?

private bool UserExists(String user)
{
   // Test if a StringCollection is named "user"
   return user == Properties.Settings.Default.name ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...