【问题标题】:I have a String List with 10 elements inside. I need to randomly add 3 elements from the 10 into a WPF listbox (one element on each line) in C#我有一个包含 10 个元素的字符串列表。我需要将 10 个中的 3 个元素随机添加到 C# 中的 WPF 列表框(每行一个元素)中
【发布时间】:2022-11-20 05:18:47
【问题描述】:
    List<string> topLevel = new List<string>();
            

            topLevel.Add("000");
            topLevel.Add("100");
            topLevel.Add("200");
            topLevel.Add("300");
            topLevel.Add("400");
            topLevel.Add("500");
            topLevel.Add("600");
            topLevel.Add("700");
            topLevel.Add("800");
            topLevel.Add("900");

我试过了

  var random=  topLevel.Distinct().OrderBy(x => Guid.NewGuid()).Take(3);
            lst2.Items.AddRange(random.ToArray());

但是我得到一个“AddRange”作为带下划线的错误,我不知道如何修复它

【问题讨论】:

  • Take() 返回 IEnumerable&lt;T&gt;。你为什么打电话给ToArray()???
  • @MarkBenningfield Idk stack overflow 上的其他人说我必须这样做,但它不起作用,你能告诉我到底该怎么做吗?
  • 如果它带有红色下划线,那么如果将鼠标悬停在带下划线的文本上,您可能会看到错误消息。错误信息是什么?
  • 别再打电话ToArray()

标签: c# wpf list random listbox


【解决方案1】:

例子:

    // Initial list source of values
    // This MUST be an observable collection
    private readonly ObservableCollection<string> lst2Source
        = new ObservableCollection<string>() { "1", "2" };

    // Immutable list of adding values
    private readonly ReadOnlyCollection<string> topLevel
        = Array.AsReadOnly("000 100 200 300 400 500 600 700 800 900".Split());

    public SomeWindow()
    {
        InitializeComponent();

        // Source is assigned once after XAML initialization
        lst2.ItemsSource = lst2Source;
    }

    private readonly Random random = new Random();
    private void AddRandom(int count)
    {
        topLevel
            .OrderBy(_ => random.Next())
            .Take(count)
            .ToList()
            .ForEach(level => lst2Source.Add(level)); // Elements are added not to the UI element, but to the value source
    }

【讨论】:

  • 也许你应该向 OP 解释为什么这会起作用。
  • @Steve,我已经在代码中添加了 cmets。
  • @MarkBenningfield 错误是“ItemCollection”不包含“AddRange”的定义并且没有可访问的扩展方法
  • @EldHasp new ObservableCollection<string>() { "1", "2" }; 是做什么的?做,当我将您的代码复制到我的代码中时,它只会将 1 和 2 打印到我的列表框中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多