正如标题所暗示的那样,我已经制作/初始化了/在Class 1中的任何2D列表,我在第2课中填充了它,并尝试在第3类中使用它的内容。
但是,在填写第2类中的列表(我已经确认它已被填充)之后,当在类3中调用要使用该类的方法时,它只是空的,我不知道为什么。< / p>
第1类
class class1
{
public List<List<String>> playerInfo = new List<List<String>>();
//it's a 2D list but as far as I know that shouldn't be a problem
第2类
public sealed partial class class2: Page
{
class1 host = new class1();
private void joinButton_Click(object sender, RoutedEventArgs e)
{
if (host.playerInfo.Count() <= 4)
{
//fill list
到目前为止似乎还行。如果我做一个Count它会显示它包含2个元素,很酷。
第3类
public sealed partial class MainPage : Page
{
GameHost host = new GameHost();
public void Init()
{
if (host.playerInfo.Count() >= 2)
{
//Do stuff
}
}
}
然而,这里的清单只是空的。 Count只返回0。
这可能是什么?
如果我在这里的例子不是很清楚,请告诉我,我对这个Stack Overflow的事情还不是很好。
答案 0 :(得分:0)
无论如何,共同的根本原因是覆盖列表引用。 请参阅下面的简单示例:
static void Main()
{
List<int> mainList = new List<int>();
UpdateList(mainList);
Console.WriteLine(mainList.Count); // prints 0
}
private static void UpdateList(List<int> numbers)
{
numbers = new List<int>();
numbers.Add(1);
numbers.Add(2);
Console.WriteLine(numbers.Count); // prints 2
}
列表引用在UpfdateList函数中传输。使用new关键字在UpfdateList中执行第一行后,您从main中丢失了对列表的引用,现在引用是在UpfdateList中创建的新列表。
要修复它,请不要覆盖列表引用:
private static void UpdateList(List<int> numbers)
{
//numbers = new List<int>(); remove that
numbers.Add(1);
numbers.Add(2);
Console.WriteLine(numbers.Count); // prints 2. 'numbers' still holds the reference the the list from the main
}
另外,请确保在Class2和Class3中使用相同的Class1实例。
答案 1 :(得分:0)
问题是您在MainPage
类中创建了一个新实例。此实例在列表中没有值。您只需将实例作为参数传递给Init
方法:
public sealed partial class MainPage : Page
{
public void Init(GameHost host)
{
if (host.playerInfo.Count() >= 2)
{
//Do stuff
}
}
}
如果要在整个GameHost
类中使用MainPage
实例,您还可以将其传递给构造函数并初始化字段,如下所示:
public sealed partial class MainPage : Page
{
GameHost host;
public MainPage (GameHost _host)
{
host = _host;
}
}
现在它可以在类中使用你之前拥有的所有初始化值。
public sealed partial class MainPage : Page
{
GameHost host;
public MainPage (GameHost _host)
{
host = _host;
}
public void Init(GameHost host)
{
if (host.playerInfo.Count() >= 2) // now it should have the desired items
{
//Do stuff
}
}
}
答案 2 :(得分:0)
我将如何做到这一点。
在App.xaml.cs on App Launch
private static List<List<String>> _playerInfo;
public static List<List<String>> PlayerInfo
{
get
{
return (_playerInfo == null) ? new List<List<string>>() : _playerInfo;
}
set { _playerInfo = value; }
}
现在没有必要上课。
class2
将
public sealed partial class class2 : Page
{
private void joinButton_Click(object sender, RoutedEventArgs e)
{
if (App.PlayerInfo.Count <= 4)
{
// Fill your List Here
}
}
}
而MainPage
将是
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
if (App.PlayerInfo.Count >=2)
{
// Do Stuff.
}
}
}