Преобразовать строку в тип списка - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть метод List, в котором мне нужно возвращать мои значения enum как тип списка.Тип данных Status является объектом enum.

Вот мой код:

public List<string> Statusstring
    {
        get
        {
            foreach (Status stat in System.Enum.GetValues(typeof(Status)).Cast<Status>().ToList())
            {
                status = stat;
            }

            return new List<string> { status.ToString() };
        }

    }

Вот мое значение enum:

public enum Status
{
    Enable,
    Disable
}

Thisэто сообщение об ошибке:

Невозможно неявно преобразовать тип 'System.Collections.Generic.List <<em> char >' в 'System.Collections.Generic.List <<em> string > '

Может кто-нибудь, пожалуйста, помогите мне в этом.

Ответы [ 7 ]

0 голосов
/ 18 сентября 2018

Для этого в .NET есть встроенная конструкция:

public IEnumerable<string> Statuses => Enum.GetNames(typeof(Status))

Если вы возвращаете IEnumerable<string> вместо списка, вы можете присвоить его массивам или спискам. И Enum.GetNames(...) возвращается как string[].

Документация для этого метода здесь

0 голосов
/ 18 сентября 2018

Как насчет этого:

Enum.GetValues(typeof(Status)).Cast<Status>() 

вернет Ienumerable.

 Enum.GetValues(typeof(Status)).Cast<Status>().ToList();
0 голосов
/ 18 сентября 2018

Это должно сделать.

using System;
using System.Linq;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        List<string> list = System.Enum.GetValues(typeof(Status))
            .Cast<Status>()
            .Select(x => x.ToString())
            .ToList();

        list.ForEach(Console.WriteLine);
    }
}

public enum Status
{
    Enable,
    Disable
}
0 голосов
/ 18 сентября 2018

То, что я вижу, представляет собой довольно запутанное решение простой проблемы.

private static List<string> StatusString() => Enum.GetNames(typeof(Status)).ToList();

Но так как значения Enum не изменятся во время выполнения, я бы выбрал статический член

Вы можете определить статический член →

private static List<string> StatusString = Enum.GetNames(typeof(Status)).ToList();
0 голосов
/ 18 сентября 2018

Первый enum к списку

var enumList = Enum.GetValues(typeof(Status))
        .Cast<int>()
        .Select(x => x.ToString())
        .ToList();

затем приведите enumList к списку строк

var stringList  = enumList.OfType<string>();
return stringList;
0 голосов
/ 18 сентября 2018

Свойство называется Statustring, но это List<string>?Я предполагаю, что приведенные ниже коды могут быть правильной реализацией:

public string Statusstring
{
    get
    {
        string query;

        query = "Select PRODUCTION_LINE_CODE from productionlineconfig where ID = '" + ProductionLineConfigs.ProductionLineId + "'";

        reader = db.QueryCommand(query);
        while (reader.Read())
        {
            if (reader["PRODUCTION_LINE_CODE"].ToString() == "1")
            {
                return Status.Enable.ToString();
            }
            else
            {
                return Status.Disable.ToString();
            }
        }
}

Или, если вам нужно вернуть List<string>, вы можете попробовать это

public List<string> Statusstring
{
    get
    {
        string query;

        query = "Select PRODUCTION_LINE_CODE from productionlineconfig where ID = '" + ProductionLineConfigs.ProductionLineId + "'";

        reader = db.QueryCommand(query);
        while (reader.Read())
        {
            if (reader["PRODUCTION_LINE_CODE"].ToString() == "1")
            {
                return new List<string>().Add(Status.Enable.ToString());
            }
            else
            {
                return new List<string>().Add(Status.Disable.ToString());
            }
        }
}
0 голосов
/ 18 сентября 2018

Если вам нужно вернуть только Список - тогда ниже # hack

                if (reader["PRODUCTION_LINE_CODE"].ToString() == "1")
                {
                    return new List<string> { Status.Enable.ToString() };
                }
                else
                {
                    return new List<string> {Status.Disable.ToString() };
                }

Обновление: - После обсуждения с OP

if (reader["PRODUCTION_LINE_CODE"].ToString() == "1")
                {
                    return new List<string> { Status.Enable.ToString(), Status.Disable.ToString() };
                }
                else
                {
                    return new List<string> {Status.Disable.ToString() };
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...