Контрольный список для значения - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть класс, который используется в качестве списка:

public class StudyOptions {
    public decimal price { get; set; }
    public string currency { get; set; }
    public string currencyIdentifier { get; set; }
    public bool lowGDP { get; set; }
    public string method { get; set; }
}

List<StudyOptions> defaultOptions = new List<StudyOptions>();

Этот список заполняется стеком значений, и после его завершения я хотел бы найти метод 'столбец', чтобы выяснить,содержит ли она конкретную строку.

Я искал в Интернете и, похоже, предлагает использовать метод Contains, но я просто не могу заставить это работать.

Может кто-нибудь помочь, пожалуйста?

Спасибо, C

Ответы [ 4 ]

0 голосов
/ 21 декабря 2018

Есть много способов сделать это:

string stringToSearch = "someString";
if (defaultOptions.Select(t => t.method).Contains(stringToSearch)) { ... }
or, if you prefer to use Any(), then can use this:

if (defaultOptions.Any(t => t.method == stringToSearch)) { ... }

// if you'd like to return first matching item, then:
var match = defaultOptions
.FirstOrDefault(x => x.Contains(stringToSearch));
if(match != null)
//Do stuff

Вот рецензия на Contains vs Any: В чем разница между Contains и Any в LINQ?

0 голосов
/ 19 декабря 2018

Вы можете подойти под:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace Rextester
{
    public class StudyOptions {
        public decimal price { get; set; }
        public string currency { get; set; }
        public string currencyIdentifier { get; set; }
        public bool lowGDP { get; set; }
        public string method { get; set; }
    }

    public class Program
    {
        public static void Main(string[] args)
        {            
            List<StudyOptions> defaultOptions = new List<StudyOptions>();
            defaultOptions.Add(new StudyOptions{ price = 0, currency = "t", currencyIdentifier = ".", lowGDP = false, method = "method"});
            foreach(var studyOptions in defaultOptions){
                if(studyOptions.method.Contains("method") )
                    Console.WriteLine(studyOptions);
            }

        }

    }
}
0 голосов
/ 19 декабря 2018

Можно также создать метод расширения для List<T> в вашей программе.Таким образом, вы можете быстро и легко использовать метод каждый раз, когда вы используете List<T>.

    /// <summary>
    ///   Gets the index of a given <paramref name="component"/> of the <see cref="List{T}"/>.
    /// </summary>
    /// <returns>The index of a given <paramref name="component"/> of the <see cref="List{T}"/>.</returns>
    /// <param name="value">The <see cref="List{T}"/> to find the <paramref name="component"/> in.</param>
    /// <param name="component">The component to find.</param>
    /// <typeparam name="T">The type of elements in the list.</typeparam>
    public static int? GetIndex<T> (this List<T> value, T component)
    {

        // Checks each index of value for component.
        for (int i = 0; i < value.ToArray().Length; ++i)
            if (value[i].Equals(component)) return i;

        // Returns null if there is no match
        return null;
    }

Используя целые числа, вот пример этого метода в действии:

    List<int> ints = new List<int> { 0, 2, 1, 3, 4 };
    Console.WriteLine(ints.GetIndex(2));
0 голосов
/ 19 декабря 2018

Я думаю, что вы можете сделать

var result = defaultOptions.Where(x=>x.method.Contains(yourStringValue).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...