Как вызвать метод с разными объектами в качестве типов параметров - PullRequest
0 голосов
/ 18 января 2019

У меня есть несколько объектов с похожими свойствами. Объекты хранятся в словарях. Теперь я хочу, чтобы один метод работал со всеми словарями.

Я пытался сделать их дочерними элементами другого объекта. Использование родительского объекта в качестве параметра и вызов функции со своими дочерними объектами не работали для меня.

ArticleItem.cs:

public class ArticleItem
{
    public int ID { get; set; }
    public string Text { get; set; }

    ... constructor and so on...
}

ArticleItemB.cs:

public class ArticleItemB
{
    public int ID { get; set; }
    public string Text { get; set; }
    public string AnotherText { get; set; }

... constructor and so on...
}

Programm.cs:

public Dictionary<string, ArticleItem> newArticle_Catalog = new 
Dictionary<string, ArticleItem>();

public Dictionary<string, ArticleItemB> newArticleB_Catalog = new 
Dictionary<string, ArticleItemB>();


newArticle_Catalog.Add("1", new ArticleItem(1,"ABC"));
newArticle_Catalog.Add("2", new ArticleItem(2,"DEF"));

newArticleB_Catalog.Add("1", new ArticleItemB(1,"ABC","DEF"));
newArticleB_Catalog.Add("2", new ArticleItemB(2,"GHI","JKL"));


public void PrintCatalog(Dictionary<string, OBJECTTYPE> catalog)
{
    foreach (var item in newCatalog)
    {
        Console.WriteLine(item.value.ToString());
    }
}

Я хочу позвонить PrintCatalog() как:

PrintCatalog(newArticle_Catalog);

или как:

PrintCatalog(newArticleB_Catalog);

И распечатайте их .ToString()

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Создать общий базовый класс как:

public abstract class ArticleItemBase
{ }

и пусть ваши классы наследуются от него как:

public class ArticleItem : ArticleItemBase

и

public class ArticleItemB : ArticleItemBase

Затем вы можете заставить ваш PrintCatalog принимать словарь с универсальным типом значения и ограничивать его только объектами вашего базового класса:

public static void PrintCatalog<T>(Dictionary<string, T> catalog) where T : ArticleItemBase
{
    foreach (var item in catalog)
    {
        Console.WriteLine(item.Value.ToString());
    }
}
0 голосов
/ 18 января 2019

Создайте базовый класс с этими свойствами и наследуйте базовый класс от всех классов Item. Тогда в PrintCatalog просто возьмите параметр типа базовый класс, а не каждый элемент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...