如何成功将对象添加到私有列表?

时间:2019-05-25 15:54:55

标签: c#

当我使用stepinto并将其添加到列表时,公用方法“ NyBok”起作用,但是当我尝试使用VisaBöcker()显示列表时,列表为空。

{
    class Bibliotikarie
    {
        private List<Bok> Böcker = new List<Bok>();     
        public static void VisaBöcker()
        {
            var gg = new Bibliotikarie();
            foreach (Bok item in gg.Böcker)  
            {
                Console.WriteLine();
                Console.WriteLine("\"" + item.Titel + "\" av " + item.Skribent + ". År " + item.UtÅr + ".  ( " + item.Typ + " )");
                Console.WriteLine();
            }  
        public static void NyBok()
        {
             var gg = new Bibliotikarie();
             gg.Böcker.Add(new Roman(TitSvar, FörSvar, ÅrSvar));               
        }     
    }

         class Bok                  
         {
             public string Titel;    
             public string Skribent;
             public string Typ;
             public int UtÅr;
         }

         class Roman : Bok         
         {
             public Roman(string _Titel, string _Skribent, int _UtÅr)
             {
                 Titel = _Titel;
                 Skribent = _Skribent;
                 UtÅr = _UtÅr;
                 base.Typ = "Roman";                         
             }


NyBok()的代码被缩短了,因为它对于瑞典语用户来说是很多不必要的代码。)

2 个答案:

答案 0 :(得分:2)

NyBok 中创建类 Bibliotikarie 的新实例,然后将项目添加到其Böcker变量中。您只能这样做,因为 Roman 类是 Bibliotikarie 类的内部对象,否则是Böcker私有变量,您不能从< em> Bibliotikarie 类。

但是在方法中创建的 gg 变量是局部变量,当您退出该方法时,该变量将被丢弃,并且其中的所有内容均会被破坏。
现在,当您调用方法VisaBöcker时,将创建类 Bibliotikarie 的另一个实例,该实例具有一个显然为空的新List。

我会在您的代码中更改很多逻辑。首先,不是 Roman 类的责任是向 Bibliotikarie 中添加项目,接下来,我将从 Bibliotikarie 中提取内部类 em>类,并使它们可以由处理 Bibliotikarie 实例的外部代码访问。

现在我们可以拥有

co6 <- crossprod(scale(mat)) / (nrow(mat) - 1)
co6[upper.tri(co6, diag = TRUE)] <- 0

此结构将允许编写这样的代码

public class Bibliotikarie
{
    private List<Bok> Böcker = new List<Bok>();

    // This method adds a Bok instance or a derived one to your list
    public void AddBok(Bok b)
    {
        Böcker.Add(b);
    }

    public void VisaBöcker()
    {
        foreach (Bok item in Böcker)
        {
            Console.WriteLine($"\r\n\"{item.Titel}\" av {item.Skribent}. År {item.UtÅr}.  ( {item.Typ} )\r\n");
        }
    }
}
public class Bok
{
    public string Titel;
    public string Skribent;
    public string Typ;
    public int UtÅr;
}

public class Roman : Bok
{
    public Roman(string _Titel, string _Skribent, int _UtÅr)
    {
        Titel = _Titel;
        Skribent = _Skribent;
        UtÅr = _UtÅr;
        base.Typ = "Roman";
    }
}

现在,您只有一个类 Bibliotikarie 的实例,将项目添加到该实例中,并从包含填充列表的同一实例中显示它们。

答案 1 :(得分:-5)

您要在整数位置插入字符串

ÅrSvar是一个字符串

    gg.Böcker.Add(new Roman(TitSvar, FörSvar, ÅrSvar));