Обновление объекта путем сопоставления с другими значениями объекта зависит от условия в C# - PullRequest
0 голосов
/ 07 января 2020

У меня есть класс, как показано ниже

public class Channels
    {
        internal string CallerExt { get; set; }
        internal string ChannelName { get; set; }
        internal string CalleeExt { get; set; }

        public Channels(string CallerExt, string ChannelName, string CalleeExt)
        {
            this.CallerExt = CallerExt;
            this.ChannelName = ChannelName;
            this.CalleeExt = CalleeExt;
        }
    }

Я хочу добавить список объектов Channel, если все значения являются новыми, если CallerExt и CaleeExt уже существуют в том же объекте тогда ChannelName должно быть обновлено с новым значением для того же объекта?

Мне удалось найти объект, который содержит CallerExt & CalleeExt Значения соответствуют новым значениям, как показано ниже:

public static List<Channels> activeChannels = new List<Channels>();

if (!string.IsNullOrWhiteSpace(caller) && !string.IsNullOrWhiteSpace(now) && !string.IsNullOrWhiteSpace(callee))
{
    var recentChannel = activeChannels.FirstOrDefault(c => c.CallerExt == caller && c.CalleeExt == callee);
}

Но я не уверен, как обновить эту спецификацию c Объект с новым именем канала? Заранее спасибо за помощь ..

Ответы [ 2 ]

1 голос
/ 07 января 2020

Вы можете попробовать этот способ, живое демо здесь

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

public class Program
{
    public static void Main()
    {
        var listOfChanels = new List<Channels>{ new Channels("1", "1", "1")};

        UpdateOrAdd(listOfChanels, new Channels("1", "2", "1"));
        UpdateOrAdd(listOfChanels, new Channels("2", "2", "2"));
        UpdateOrAdd(listOfChanels, new Channels("2", "3", "3"));

        foreach(var item in listOfChanels)
            Console.WriteLine(item.CalleeExt + item.CallerExt + item.ChannelName);
    }

    private static void UpdateOrAdd(List<Channels> list, Channels newObject)
    {
        var item = list.FirstOrDefault(p => p.CalleeExt == newObject.CalleeExt && p.CallerExt == newObject.CallerExt);

        if(item == null){
            list.Add(newObject);
        }else{
            item.ChannelName = newObject.ChannelName;
        }
    }

    public class Channels
    {
        internal string CallerExt { get; set; }
        internal string ChannelName { get; set; }
        internal string CalleeExt { get; set; }

        public Channels(string CallerExt, string ChannelName, string CalleeExt)
        {
            this.CallerExt = CallerExt;
            this.ChannelName = ChannelName;
            this.CalleeExt = CalleeExt;
        }
    }
}
0 голосов
/ 07 января 2020

Спасибо тем, кто пытался ответить на мой вопрос, у меня сработало следующее решение

if (!string.IsNullOrWhiteSpace(caller) && !string.IsNullOrWhiteSpace(now) && !string.IsNullOrWhiteSpace(callee))
{
    var recentChannel = activeChannels.FirstOrDefault(c => c.CallerExt == caller && c.CalleeExt == callee);
    if (recentChannel != null)
        recentChannel.ChannelName = now;
}                                      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...