小编Ale*_*lex的帖子

C# 如果满足条件,则将元素插入列表

如果不存在某个数字,如何将某个数字插入到列表中间?

在下面的示例中,我尝试插入数字 4

        List<int> list1 = new List<int>(){ 0, 1, 2, 3, 5, 6 };
        int must_enter = 4;
        if (!list1.Contains(must_enter))
        {
            list1.Add(must_enter);
        }
Run Code Online (Sandbox Code Playgroud)

由于结果编号将在列表末尾输入,但我希望它位于 3 之后(5 之前)

请注意,由于项目的具体情况,我无法使用排序列表,但列表中的所有数字都保证按升序排列(0,2,6,9,10,...)

编辑:我知道有一个错误,这就是我所做的:

        List<int> list0 = new List<int>() { 1, 2, 3, 5, 6 };
        int must_enter = 7;
        if (!list0.Contains(must_enter))
        {
            if (must_enter < list0.Max())
            {
                int result = list0.FindIndex(item => item > must_enter || must_enter > list0.Max());
                list0.Insert(result, must_enter);
            }
            else
            {
                list0.Add(must_enter);
            }

        }
Run Code Online (Sandbox Code Playgroud)

edit2:无论如何,由于几个因素,我已经切换到 …

c# list

2
推荐指数
1
解决办法
1万
查看次数

区分键盘的真实按键和虚拟按键

我正在用 C# 编写一个程序,它必须模拟键盘的按键命令。

问题是 - 我需要模拟“真实”的键盘按钮点击,而不是假的。例如,据我所知:

  • 当用户按下键盘上的任何按钮时 - 信号通过 USB 发送,然后通过键盘的驱动程序进行。

  • 当使用 API 时(SendInput、SendKeys、KeyBoardEvent 或其他) - 我们绕过 USB 和驱动程序,因此基本上可以通过全局钩子方法跟踪这些类型的按下。

你如何模拟真实的按键?

  • 我没有 C++ 知识,所以编写自定义驱动程序不是一种选择。

  • 我不介意使用微控制器或任何额外的硬件“解决方案”,只要它便宜..

  • 也许可以通过 USB 电缆连接两台 PC,以便将真实的键盘按钮按下信号从 PC2 发送到 PC1?

那么方法是什么?

c# keyboard keypress

2
推荐指数
1
解决办法
3517
查看次数

使用C#生成完全随机的偶数

有没有什么好方法用C#生成随机偶数?我想出了这段代码:

    Random RandString = new Random(0);
Run Code Online (Sandbox Code Playgroud)

码:

    private void button6_Click(object sender, EventArgs e)
    {
        int min = 0;
        int max = 50;

        int rand = RandString.Next(min, max-1);
        while (rand % 2 == 1) // odd
        {
            rand = RandString.Next(min, max-1);
        }

        textBox4.Text = "" + rand;
    }
Run Code Online (Sandbox Code Playgroud)

这段代码有问题:

  • 我目前的解决方案可能不是最快的
  • 很多时候,这个方法生成的数字会以相同的顺序重复!例如,经过5次迭代后,我可以得到:8,10,20,30,16.经过多次点击(15秒钟)后,我可以 连续获得10,30,20或30,20,10 ......我是不确定,但这不是我所谓的"随机".

那么有什么方法可以解决我所描述的问题,还是有其他方法?

c# random numbers winforms

2
推荐指数
1
解决办法
5100
查看次数

使用C#在数组中移动元素

有没有办法在数组中移动项目?例如:

int[] myArray = {1,2,3,4};
Run Code Online (Sandbox Code Playgroud)

第二个元素成为最后一个:

int[] myArray = {1,3,4,2};
Run Code Online (Sandbox Code Playgroud)

PS:不,那不是作业.我可以想到至少一个解决方案,但它需要相当困难的实现:

  • 首先,我们将第二个元素保存到Int
  • 然后我们从数组中删除这个元素
  • 然后我们在数组的最后添加新元素

还有其他(阅读 - 更简单)的方法吗?

c# arrays element

2
推荐指数
1
解决办法
6158
查看次数

在C#中将字符串转换为控件名称

可能重复:
按名称在C#winforms中查找控件

想象一下,我们有4个textBoxes(和一个按钮):

textBox1 :(这里我们必须输入我们要更改背景的textBox的名称)

TextBox2中:()

textBox3 :()

textBox4 :()

在我们的第一个文本框中,我们输入任何其他TextBox的名称,当我们单击一个按钮时 - backrground将相应地更改.

通常我会做这样的事情:

private void button1_Click(object sender, EventArgs e)
{
string variableName = textBox1.Text();

if (variableName == "textBox1")
{
    textBox1.BackColor = Color.Black;
}
else if (variableName == "textBox2")
{
    textBox2.BackColor = Color.Black;
}
else if (variableName == "textBox3")
{
    textBox3.BackColor = Color.Black;
}
else if (variableName == "textBox4")
{
    textBox4.BackColor = Color.Black;
}
}
Run Code Online (Sandbox Code Playgroud)

另一种方式 - 更简单的方法是做同样的操作:

private void button1_Click(object sender, EventArgs e)
{
    string variableName = textBox1.Text(); …
Run Code Online (Sandbox Code Playgroud)

c# controls winforms

2
推荐指数
1
解决办法
1万
查看次数

使用C#计算数组中的数字超过一定水平

我有一系列数字:

int[] array = new int[]{ 18, 5, 10, 12, 15, 18 };
Run Code Online (Sandbox Code Playgroud)

如何计算超过一定水平的所有数字(不重复)?LINQ会有什么帮助吗?

例如 - 有10 以上的数字(18和15,12).

只有1个数字超过15(18,18实际上是相同的数字).

编辑:(抱歉忘了这个)

是否有可能计算超过一定水平的重复?

即在我的"15"的例子中,将有2次重复

编辑2

我的"分组"方式

int count1 = array.Where(x => x > 15).Distinct().Count();
int count2 = array.Where( x => x > 15).Count();
int count3 = count2 - count1;
Run Code Online (Sandbox Code Playgroud)

c# linq arrays comparison numbers

1
推荐指数
1
解决办法
1904
查看次数

与awesominum webcontrol交互

你能在awesomium webcontrol中找到HTML元素来进行进一步的处理吗?

例如,我可以使用以下方法在Watin中找到必要的元素(甚至元素集合):

Link playButton = myie.ElementOfType<Link>(Find.ById("myid")); // find link (<a>)
Div test = myie.Div(Find.ById("audio")); // find div (<div>)
Run Code Online (Sandbox Code Playgroud)

找到后 - 您可以提取该元素的多个属性

string classname = playButton.ClassName; // alternatively -> inner text, link, id, class and all bucket of other properties
Run Code Online (Sandbox Code Playgroud)

我如何在awesomium中做到这一点?它是否具有内置的DOM解析器来操作网站控件?(div,链接,表等..)

到目前为止,我只能找到javascript执行命令,但这不是我正在寻找的 ..

另外,我想知道如何将网页的HTML保存为字符串(在awesomium中)?

string mysite = webControl1.SiteHTML.ToString(); // something like this
// instead of
string mysite = webControl1.ExecuteJavascriptWithResult("document.documentElement.outerHTML").ToString();
Run Code Online (Sandbox Code Playgroud)

编辑:解释

它看起来像awesomium本身不支持HTML元素解析,所以我的备份计划如下:

  1. 在awesomium中打开网页
  2. 抓取HTML到字符串(当前使用:ExecuteJavascriptWithResult())
  3. 将字符串解析为HTML(当前使用:"HTML Agility pack")
  4. 做我需要做的事情(找到元素,集合等)
  5. 根据前面的步骤结果在awesomium中执行JS命令

如果awesomium有DOM支持,那么所有这些都会更容易..但是......好吧..

c# web-controls awesomium

1
推荐指数
1
解决办法
5336
查看次数

通过devtools控制台更新React组件的状态

我正在尝试使用in设置input字段的值devtools consoleGoogle Chrome

此任务的要点是元素的状态可能由状态控制React.js。在找到以下内容后,我得出了这个结论__reactProps

在此输入图像描述

我试图操作的元素位于TradingView。如果您打开任何资源之王并在页面底部找到日历按钮:

在此输入图像描述

将打开一个模式窗口,其中包含以下内容:

在此输入图像描述

我试图以编程方式将日期输入字段值设置为任何其他有效值,但问题是,提交表单后 -正在使用旧值!事实上,可以通过在表单提交之前将鼠标光标悬停在元素上来进一步确认这一点。执行此操作后 - 该值将恢复为旧值/初始值。

我已经进行了十几次尝试永久更改 的值devtools console,但无论如何它都会恢复到其初始值:

var myObj = document.querySelector("div[data-name='go-to-date-dialog'] input");
myObj.value = "2021-09-01";
myObj.setAttribute('value', "2021-09-01");
myObj.defaultValue = '2021-09-01';
myObj._wrapperState.initialValue = '2021-09-01';

var keys = Object.keys(myObj);
var propsKey = keys.find(key=>{ return key.startsWith("__reactProps$") });
myObj[propsKey].value = '2021-09-01';

myObj.dispatchEvent(new Event('blur'));
Run Code Online (Sandbox Code Playgroud)

是否React.js需要某种特殊处理?有没有办法invoke从控制台和普通js将新状态转换为日期组件?

我试图实现的任务仅用于教育目的,并不意味着“破解”或对任何特定软件或平台造成损害。我认为这个问题与任何网站上制作的任何组件相关React.js

javascript dom-manipulation reactjs

1
推荐指数
1
解决办法
1112
查看次数

从给定位置开始重新排序列表

列表:

List<int> list1 = new List<int>(){ 0, 1, 2, 3, 4, 5, 6 };
Run Code Online (Sandbox Code Playgroud)

假设我们想要重新排序。开头应为数字“2”

// 2,3,4,5,6,0,1
Run Code Online (Sandbox Code Playgroud)

或 5 号

// 5,6,0,1,2,3,4
Run Code Online (Sandbox Code Playgroud)

你如何用 C# 做到这一点?

原因:假设您在 List 中有一个给定数字的索引(数字 3,索引 3)。您想要获得右侧第二个数字 - 它将是 5。

不幸的是,如果起始数字位于列表的末尾(数字 5 和 6),则会抛出超出范围异常,因为没有 7 和 8!

这个想法是重新排序列表!

  • 我们输入 Nr。5 - 我们得到 0 (5,6,0)。
  • 我们输入 Nr。6 - 我们得到 1 (6,0,1),等等。

或者也许还有其他(更好的)方法来解决这个问题?

c# list

0
推荐指数
1
解决办法
2966
查看次数

使用C#从另一个列表中排除一个列表的项目

关于如何从一个列表中排除另一个列表的项目,我有一个相当具体的问题.常见的方法,如Except()不会这样做,原因如下:

  • 如果列表中的副本具有"偶数"索引 - 我需要在它之后删除THIS元素和NEXT元素.
  • 如果列表中的副本有一个"奇数"索引 - 我需要删除这个元素和一个元素BEFORE**它.
  • 列表中可能有许多相同副本的出现.即一个可能是"奇数"指数,另一个可能是"偶数".

我不是在寻求解决方案,因为我自己创建了一个解决方案.然而,在多次执行此方法之后 - "ANTS性能分析器"显示该方法经过了整个执行时间的75%(40个中的30秒).问题是:是否有更快的方法来执行相同的操作?我试图优化我当前的代码,但它仍然缺乏性能.这里是:

private void removedoubles(List<int> exclude, List<int> listcopy)
{
    for (int j = 0; j < exclude.Count(); j++)
    {
        for (int i = 0; i < listcopy.Count(); i++)
        {
            if (listcopy[i] == exclude[j])
            {
                if (i % 2 == 0) // even
                {
                    //listcopy.RemoveRange(i, i + 1);
                    listcopy.RemoveAt(i);
                    listcopy.RemoveAt(i);
                    i = i - 1;
                }
                else //odd
                {
                    //listcopy.RemoveRange(i - 1, i);
                    listcopy.RemoveAt(i - 1);
                    listcopy.RemoveAt(i - 1);
                    i …
Run Code Online (Sandbox Code Playgroud)

c# optimization list winforms

0
推荐指数
1
解决办法
1473
查看次数