Как получить значение массива класса в 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;
Это предполагает, что предоставленный идентификатор всегда будет в списке. Если нет, вам нужно будет сделать несколько проверок, чтобы избежать исключений.