C# 如何使用其他类中的方法将列表清空到listbox中

C# 如何使用其他类中的方法将列表清空到listbox中,c#,C#,我有一门课: class Game { public static List<Participant> Participants = new List<Participant>(); public static List<SummonerStats> SummonerStatsList = new List<SummonerStats>(); } 我想将召唤者状态列表中的每个对象添加到列表框中。我可以通过在button2_Clic

我有一门课:

class Game
{
    public static List<Participant> Participants = new List<Participant>();
    public static List<SummonerStats> SummonerStatsList = new List<SummonerStats>();
}
我想将
召唤者状态列表中的每个对象添加到
列表框中。我可以通过在button2_Click方法下遍历列表中的每个对象来实现这一点,但我不希望在我的界面中有任何代码


我如何在游戏类中创建一个方法,返回列表中的每个项目,或者最干净的解决方案是什么,允许我将代码和接口分开。

为了保持代码和接口分开,您可以通过执行以下操作来实现这一点:

  • 在Game类中创建一个方法,该方法返回一个字符串类型列表(GetCallerstats)

  • 在名为CallowerStatsList的列表中使用,从CallowerStats类中选择特定属性(在本例中我使用了“PropertyName”)

    public static List<string> GetSummonerStats()
    {
        return SummonerStatsList.Select(x => x.PropertyName).ToList();
    }
    

  • Vibhav Ramcharan的答案稍有不同,我将从列表中选择内容的逻辑移到了按钮单击方法中。这就省去了在游戏类中创建新方法的麻烦

    如果每次希望填充表单中的简单列表时都要继续向游戏类添加方法,那么游戏类将很快变得过于臃肿

    基本上,您在这里所做的是根据请求从CallersStatsList中仅选择填充列表所需的属性

    这个答案会使您失去可重用性,因为业务逻辑现在位于button click事件中,但是如果需要此代码的可重用性,那么请将逻辑移动到业务层中的另一个方法中,并且不要使游戏类膨胀,因为它看起来像是某种存储库

    public class Game
        {
            public static List<Participant> Participants = new List<Participant>();
            public static List<SummonerStats> SummonerStatsList = new List<SummonerStats>();       
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
            lstSummonerStats.DataSource = Game.SummonerStatsList.Select(x => x.PropertyName).ToList();
        }
    

    有许多模式可以应用。DataIndig(生成它,或将它包装在ObservableCollection中)、MVVM、事件等等,并非都是互斥的。你试过什么?我从没听说过这些。我唯一能想到的就是在button_click方法中遍历列表:(
    private void button2_Click(object sender, EventArgs e)
    {
        lstSummonerStats.DataSource = Game.GetSummonerStats();
    }
    
    public class Game
        {
            public static List<Participant> Participants = new List<Participant>();
            public static List<SummonerStats> SummonerStatsList = new List<SummonerStats>();       
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
            lstSummonerStats.DataSource = Game.SummonerStatsList.Select(x => x.PropertyName).ToList();
        }
    
        public static class GameExtensions
        {
            public static List<string> GetSummonerList(this Game game)
            {
                return game.SummonerStatsList.Select(x => x.PropertyName).ToList();
            };
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
            lstSummonerStats.DataSource = Game.GetSummonerList();
        }