Как получить значение массива класса в C#?

У меня есть класс Payment_Type с двумя полями id а также value,

public class Payment_Type
{
  public int id { get; set; }
  public string value { get; set; }
  public Payment_Type(int p, string p_2)
  {
    this.id = p;
    this.value = p_2;
  }
  public static Payment_Type[] PaymentTypeList()
  {
     Payment_Type[] pay = new Payment_Type[4];
     pay[0] = new Payment_Type(1, "Cheque");
     pay[1] = new Payment_Type(2, "Demand Draft");
     pay[2] = new Payment_Type(3, "Cash");
     pay[3] = new Payment_Type(4, "Other");
     return pay;
   }
}

я хочу value из id 2. Я попробовал следующий код, но он не работает.

Byte Payment_Type_Id = 2
string val = Payment_Type.PaymentTypeList().GetValue(Payment_Type_Id).ToString();

Это дает мне результат в виде пространства имен класса Payment_Type, т.е. CRMEvent.Models.CRM.BLogic.Payment_Type,

Помоги мне, я не знаю, что с этим не так. У меня нет глубоких знаний MVC.

3 ответа

Решение
Byte Payment_Type_Id = 2; // <- int will be better here
String val = Payment_Type.PaymentTypeList()[Payment_Type_Id].value.ToString();

Вы можете использовать LINQ:

int paymentTypeId = 2;
var paymentType = Payment_Type.PaymentTypeList().FirstOrDefault(x => x.id == paymentTypeId);
if (paymentType == null)
{
    // no value with id=2 was found in the array
}
else
{
    // you could use the paymentType.value here
}

Проблема в том, что Payment_Type.PaymentTypeList().GetValue(Payment_Type_Id) возвращает объект типа Payment_Type, Когда вы звоните ToString В этом методе используется базовое определение объекта, которое просто отображает тип объекта.

Payment_Type.PaymentTypeList().GetValue(Payment_Type_Id).Value

Это получит строковое значение выбранного элемента в массиве.

Возможно, вы захотите взглянуть на разные способы доступа к элементу в массиве. Я лично предпочел бы использовать словарь (так как этот вид поиска именно то, для чего он нужен), что означало бы, что если у ваших элементов по какой-либо причине когда-либо будут пробелы в индексах, у вас не будет проблем с поиском.

public static Dictionary<int, Payment_Type> PaymentTypeList()
{
    var pay = new Dictionary<int, Payment_Type>();
    pay.Add(1, new Payment_Type(1, "Cheque"));
    pay.Add(2, new Payment_Type(2, "Demand Draft"));
    pay.Add(3, new Payment_Type(3, "Cash"));
    pay.Add(4, new Payment_Type(4, "Other"));
    return pay;
}

Затем вы можете получить доступ к тому, что вы хотите, используя:

Byte Payment_Type_Id = 3;
string val = Payment_Type.PaymentTypeList()[Payment_Type_Id].value;

Это предполагает, что предоставленный идентификатор всегда будет в списке. Если нет, вам нужно будет сделать несколько проверок, чтобы избежать исключений.

Другие вопросы по тегам