我刚刚注意到,当你List在c#中声明一个时,你可以在最后添加括号或花括号.
List<string> myList = new List<string>();
List<string> myList2 = new List<string>{};
Run Code Online (Sandbox Code Playgroud)
这两个列表似乎都具有相同的功能.用括号或花括号声明它们是否有任何实际差异?
我在Pandas数据框中读了一个包含8列的CSV文件.最后一列包含一条错误消息,其中一些包含逗号.这会导致文件读取失败并显示错误ParserError: Error tokenizing data. C error: Expected 8 fields in line 21922, saw 9
有没有办法忽略第8个字段后的所有逗号,而不是必须通过文件删除多余的逗号?
读取文件的代码:
import pandas as pd
df = pd.read_csv('C:\\somepath\\output.csv')
Run Code Online (Sandbox Code Playgroud)
有效的线:
061AE,Active,001,2017_02_24 15_18_01,00006,1,00013,some message
Run Code Online (Sandbox Code Playgroud)
失败的行:
061AE,Active,001,2017_02_24 15_18_01,00006,1,00013,longer message, with commas
Run Code Online (Sandbox Code Playgroud) 我有一个更改注册表值以隐藏 Windows 任务栏中不需要的图标的函数(tryOpenCreateKey 是一个函数,用于更新现有值或创建不存在的键,因为组策略可以做奇怪的事情)。
public static void changeTaskBar()
{
string subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer";
string setting = "EnableAutoTray";
int setTo = 1;
using (RegistryKey regKey = Registry.CurrentUser.OpenSubKey(subKey, true))
{
tryOpenCreateKey(regKey, setting, setTo, RegistryValueKind.DWord, subKey);
SHChangeNotify(HChangeNotifyEventID.SHCNE_ASSOCCHANGED, HChangeNotifyFlags.SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero); //Updates Windows Explorer with new reg changes
}
}
Run Code Online (Sandbox Code Playgroud)
如果在 Windows 加载时将注册表值设置为 0,则所有任务栏托盘图标都可见。正确运行此代码将其设置为 1,但要使其在视觉上生效,需要重新启动 explorer.exe。
在“通知区域图标”菜单中,有一个“始终在任务栏上显示图标和通知”选项,它会更新此注册表值并刷新 explorer.exe 的显示,而无需重新启动它。
我也希望能够以编程方式执行此操作。我有一个类似的功能,可以取消隐藏隐藏的文件和文件夹,它必须调用资源管理器的刷新才能使隐藏的项目真正变为可见。
[Flags]
private enum HChangeNotifyEventID
{
SHCNE_ASSOCCHANGED = 0x08000000,
}
[Flags]
private enum HChangeNotifyFlags
{
SHCNF_IDLIST = 0x0000
}
[Flags]
private enum SendMessageTimeoutFlags : uint …Run Code Online (Sandbox Code Playgroud) 我正在使用System.Threading计时器来轮询不同线程上的传感器(由于通信延迟,一次一个很慢).它还允许用户通过更改计时器周期来更改轮询速率.
如果计时器在下一个时期之前没有完成,那么我无法解决的问题是什么.我写了一个测试程序,但它没有真正回答任何问题.
如果我有一个运行大约需要1.7秒并且每10秒调用一次的函数,它会在下一个启动之前完成,并且我的CPU使用率在13%(一个核心100%)和0%之间波动.
t = new Timer(doWork, null, 0, 10000);
private void doWork(object o)
{
for(int i = 0; i < numberItts; i++)
{
}
}
Run Code Online (Sandbox Code Playgroud)
如果我然后将计时器周期降低到1秒,我会期望它在前一个线程完成之前不执行线程,或者继续生成新线程,并且随着更多线程在其他完成之前启动,CPU使用率将会上升.实际发生的是CPU使用率在13%到25%之间波动.
将周期更改为500毫秒,CPU使用率将在38%和50%之间波动.当然,在这一点上,他们应该比他们结束时更快地开始.
这些线程是如何管理的?当轮询速率快于完成线程的速率时,限制创建的数量是多少?
我正在使用Visual Studio 2017-15.9.7进行C ++开发,看起来我已经安装了必要的模块。
但是下面的代码给出了错误-“命名空间” std“没有成员” variant“”
std::variant在C ++ 17中受支持,并且看起来它是在15.0中引入Visual Studio的
#include <iostream>
#include <variant>
int main()
{
std::variant<int, double, std::string> value;
}
Run Code Online (Sandbox Code Playgroud)
我有一个实现C#的类,SerialPort它曾经是这样的:
public class AsyncSerial : IDisposable
{
SerialPort newPort; //Parameters declared in my constructor
//Constructor and other methods
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if(disposing)
{
this.Close();
this.Dispose();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这在代码分析中不会引发任何警告(我从MSDN获取代码作为如何正确执行此操作的示例).
因为我只是要宣布一个SerialPort我认为我会让我的班级成为孩子SerialPort,但现在我得到警告,我似乎无法解决.
public class AsyncSerial : SerialPort
{
//Constructor and other methods
public new void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected new virtual void Dispose(bool disposing)
{
if(disposing)
{
this.Close();
this.Dispose();
}
}
} …Run Code Online (Sandbox Code Playgroud) 如何从 VB.NET 中的输入数据表(已填充)更改数据列的数据类型,然后我会将代码放在 Blue Prism Code Stage 中输入:
我要更改数据类型的字段(列)的名称
我要转换的数据类型
输入集合(数据表)
例子:
Dim InputDT As New DataTable
InputDT.Columns.Add(New DataColumn("test"))
dt.Columns("test").DataType = GetType(Date)
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个从字典文件中读入的字符串列表(按字母顺序排序).我想创建每个起始字母的最后一个位置的索引,所以如果有1000个以A开头的单词,它将被记录为位置999(因为数组从0开始).以B开头的1000个单词意味着B的结束位置是1999年,依此类推.这些位置值将存储在int数组中.
我能想到的唯一方法就是循环遍历整个列表,并且还有很多if语句来查看单词的第一个字母.不是最优雅的解决方案.
有没有人知道一个简单的方法来做到这一点,而不是26个if语句?
编辑:这样做的目的是生成随机单词.如果我想要以BI开头的单词将生成1000到1999之间的随机数,并从列表中的该位置获取单词.
我在C#程序中有一个Windows窗体,FormBorderStyle设置为FixedToolWindow.
窗口没有正常的控制框,但用户仍然可以从菜单中将其最小化.还有一个窗口以最小化状态启动的设置.
当用户单击最小化按钮时,它调用以下函数:
private void minimizeWindow()
{
timer1.Enabled = false;
this.WindowState = FormWindowState.Minimized;
this.Hide();
}
Run Code Online (Sandbox Code Playgroud)
窗口变成屏幕左下角的一个小框,然后消失(从this.hide通话中).当从Form_Load方法中调用相同的函数时(当设置开始最小化时),它最小化但不消失.
我的猜测是因为我在到达结尾之前隐藏了表单,Form_Load当它到达方法结束时再次显示.是否有任何方法可以确保表单在加载时隐藏(从系统托盘图标再次最大化)?
编辑:包含表单加载的所有代码
private void Form1_Load(object sender, EventArgs e)
{
this.Left = windowXPos;
this.Top = windowYPos;
sysTrayIcon.MouseDoubleClick += new MouseEventHandler(sysTrayIcon_MouseDoubleClick);
sysTrayIcon.BalloonTipText = "Timers Running";
this.sysTrayIcon.Icon = this.Icon;
sysTrayIcon.Visible = true;
sysTrayIcon.ShowBalloonTip(500);
Start(); //sets up timers
if (startMinimized)
{
minimizeWindow();
}
}
Run Code Online (Sandbox Code Playgroud) 我在类中有以下代码来设置串行端口甚至处理程序.
我得到两个警告; CA1034(不要窝类型),它告诉我,使我delgate私人(这将阻止我是来设置,甚至处理在继承的类),以及CA1009(申报事件的第二个参数作为一个EventArgs,或一个实例一个扩展EventArgs的类型,名为'e'),我不明白.
我的代码如下
myPort.DataReceived += new SerialDataReceivedEventHandler(port_OnDataRecived); //Setup when port is opened
private void port_OnDataRecived(object sender, SerialDataReceivedEventArgs e)
{
int lengthToRead = myPort.BytesToRead;
byte[] rxBytes = new byte[lengthToRead];
myPort.Read(rxBytes, 0, lengthToRead);
PacketReceived(rxBytes, e);
}
public delegate void PacketReceivedEventHandler(object sender, byte[] packet);
public event PacketReceivedEventHandler OnPacketReceived;
public virtual void PacketReceived(byte[] packet, EventArgs e)
{
if (OnPacketReceived != null)
{
OnPacketReceived(this, packet);
}
}
Run Code Online (Sandbox Code Playgroud)
我一直在查看MSDN文章和一些SO问题,但我无法将建议的修复程序与我自己的代码联系起来. 这个答案是有道理的,但转换我的代码看起来像它导致
OnPacketReceived(this, packet);
Run Code Online (Sandbox Code Playgroud)
被替换为
handle(this, new PacketReceivedEventHandler();
Run Code Online (Sandbox Code Playgroud)
这是一个争论(void (object, byte[]) target)(这是我被困的地方).至于尝试修复CA1034警告,我甚至看不到我写的是嵌套类型,MSDN文章没有包含如何修复规则违规的示例.