Как получить доступ к члену класса через переменную - PullRequest
0 голосов
/ 13 января 2020

У меня есть класс, который я создал

public class DataRecord
{
     public string PayerAccount { get; set; }
     public string GlobalEntityType { get; set; }
     public string GlobalEntityNumber { get; set; } 
}

Я сейчас пытаюсь получить доступ к этому DataRecord другим методом с помощью переменной

public List<DataTest> CountAndFrequency(IEnumerable records, string ColumnName, int numResults)
{
     foreach (DataRecord record in records)
     {
           record.ColumnName = record.ColumnName.ToUpper();
     }
}

Я получить ошибку, что DataRecord не содержит определения для ColumnName, что, конечно, имеет смысл. Вопрос в том, как мне бороться с этой проблемой? Я искал inte rnet безрезультатно и был бы признателен за любую помощь.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Вы можете использовать отражение для этого. Попробуйте это

    public static List<DataTest> CountAndFrequency(IEnumerable<DataRecord> records, string ColumnName, int numResults)
    {
        foreach (DataRecord record in records)
        {
            var prop = typeof(DataRecord).GetProperty(ColumnName);
            var value = prop.GetValue(record).ToString().ToUpper();
            prop.SetValue(record, value);

        }
    }
0 голосов
/ 13 января 2020

Если вы хотите получить доступ к данным через строковое имя, вы сохраняете данные в Dictionary<string,string>.

public class DataRecord
{
    private readonly Dictionary<string, string> data;

    public DataRecord()
    {
        this.data = new Dictionary<string, string>();
    }
    // Access data with names
    public string this[string columnName]
    {
        get{ return data[columnName]; } 
        set{ data[columnName] = value;}
    }
    // Fake properties
    public string PayerAccount
    {
        get => data[nameof(PayerAccount)];
        set => data[nameof(PayerAccount)] = value;
    }
    public string GlobalEntityType
    {
        get => data[nameof(GlobalEntityType)];
        set => data[nameof(GlobalEntityType)] = value;
    }
    public string GlobalEntityNumber
    {
        get => data[nameof(GlobalEntityNumber)];
        set => data[nameof(GlobalEntityNumber)] = value;
    }
}
class Program
{
    static void Main(string[] args)
    {
        var record = new DataRecord
        {
            PayerAccount = "10024",
            GlobalEntityType = "QXT",
            GlobalEntityNumber = "509382"
        };

        var number = record["GlobalEntityNumber"];
        // 509382
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...