using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
public class PhoneNumber
{
public PhoneNumber()
{
}
public PhoneNumber(string n, string num)
{
Member = new Dictionary<string, string>();
Member.Add(n,num);
}
public void Add(string n, string num)
{
Member = new Dictionary<string, string>();
Member.Add(n,num);
}
public Dictionary<string,string> Member { get; set; }
}
class FriendsPhoneNumbers : PhoneNumber
{
public FriendsPhoneNumbers (){}
public FriendsPhoneNumbers (string n, string num, bool wk) :
base(n, num)
{
IsWorkNumber = wk;
}
public bool IsWorkNumber { get; private set; }
}
class PhoneList<T> where T : PhoneNumber
{
T[] phList;
int end;
public PhoneList()
{
phList = new T[10];
end = 0;
}
public bool Add(T newEntry)
{
if(end == 10) return false;
phList[end] = newEntry;
end++;
return true;
}
}
public class Program
{
public static void Main(string[] args)
{
PhoneNumber pnm=new PhoneNumber("Hii","123");
pnm.Add("Hello","456");
Console.WriteLine("pnm count: "+pnm.Member.Count);
foreach(KeyValuePair<string,string> k in pnm.Member)
{
Console.WriteLine(k.Key+": "+k.Value);
}
PhoneList<PhoneNumber> p2=new PhoneList<PhoneNumber>();
p2.Add(new PhoneNumber("Hii!","789"));
p2.Add(new PhoneNumber ("Hello","4565"));
foreach(KeyValuePair<string,string> k in p2.Member)
{
Console.WriteLine(k.Key+": "+k.Value);
}
}
}
}
错误:PHONELIST&#39;不包含&#39;会员&#39;的定义没有推广方法&#39;会员&#39; 接受PhoneList类型的第一个参数&#39; 可以找到(你错过了使用指令或汇编引用吗?)
属性字典&#34;成员=新词典()&#34;可以在课堂上宣布&#34; Phonenumber&#34;这样两个&#34;添加&#34;类中的方法和构造函数使用它并在Main方法中给出pnm.count值= 2。
答案 0 :(得分:0)
p2是PhoneList
PhoneList<PhoneNumber> p2=new PhoneList<PhoneNumber>();
PhoneList没有成员属性,所以:
foreach(KeyValuePair<string,string> k in p2.Member)
没有任何意义,并且非常正确地抛出错误。我想你希望PhoneList继承Collection,因为它是一个带有一些Add逻辑的自定义集合,这正是Collection的用途。那么你将有一个课程,你可以实现拉回物品,然后你可以要求他们的Memeber财产。
所以它看起来像这样:
public class PhoneList<T> : Collection<T> where T : PhoneNumber
{
protected override void InsertItem(int index, T item)
{
if (this.Count() < 10)
{
base.InsertItem(index, item);
}
}
}
它不会返回true,但您永远不会在代码中使用返回值。然后你可以这样写:
foreach(var k in p2.SelectMany(x => x.Member))
{
Console.WriteLine(k.Key+": "+k.Value);
}
这会给你所有数字。
至于你的初始化成员,你可能想要这样做:
public class PhoneNumber
{
public PhoneNumber()
{
Member = new Dictionary<string, string>();
}
public PhoneNumber(string n, string num) : this()
{
Member.Add(n,num);
}
public void Add(string n, string num)
{
Member = new Dictionary<string, string>();
Member.Add(n,num);
}
public Dictionary<string,string> Member { get; private set; }
}
无论你调用什么构造函数,它总是被初始化,并且可以从类外部重置。你会得到计数:
pnm.Members.Count;