我需要一个快速算法从通用列表中选择5个随机元素.例如,我想从a获得5个随机元素List<string>
.
我一直在尝试用C#学习多线程编程,我很困惑什么时候最好使用线程池而不是创建我自己的线程.一本书建议仅为小任务使用线程池(无论这意味着什么),但我似乎无法找到任何真正的指导方针.在做出此编程决策时,您使用了哪些注意事项?
我已经有一个准备建立的项目.目前,我正在使用visual studio 2013.
但是,我不知道如何在visual studio 2013中创建MSI设置,但是对于visual studio 2010,有很多教程讨论如何在visual studio 2010中创建设置.
这是否意味着我需要安装visual studio 2010才能为我的项目创建应用程序设置?
在visual studio 2013中创建应用程序设置的最简单方法是什么?
我的应用程序使用VSTO读取Excel文件并将读取的数据添加到StringDictionary
.它仅添加具有几位数字的数据(1000 1000,2 1000,34 - 逗号是俄罗斯标准中的分隔符).
最好检查当前字符串是否是合适的数字?
object data, string key; // data had read
try
{
Convert.ToDouble(regionData, CultureInfo.CurrentCulture);
dic.Add(key, regionData.ToString());
}
catch (InvalidCastException)
{
// is not a number
}
Run Code Online (Sandbox Code Playgroud)
要么
double d;
string str = data.ToString();
if (Double.TryParse(str, out d)) // if done, then is a number
{
dic.Add(key, str);
}
Run Code Online (Sandbox Code Playgroud)
我必须使用StringDictionary
而不是Dictionary<string, double>
因为以下解析算法问题.
我的问题:哪种方式更快?哪个更安全?
打电话Convert.ToDouble(object)
或者打电话会更好Convert.ToDouble(string)
吗?
当我创建一个新项目时,我对未处理的异常会有一个奇怪的行为.这就是我可以重现问题的方法:
1)创建一个新的Windows窗体应用程序(C#,. NET Framework 4,VS2010)
2)将以下代码添加到Form1_Load
处理程序:
int vara = 5, varb = 0;
int varc = vara / varb;
int vard = 7;
Run Code Online (Sandbox Code Playgroud)
我希望VS中断并在第二行显示未处理的异常消息.但是,会发生的是第三行只是跳过而没有任何消息,应用程序一直在运行.
我现有的C#项目没有这个问题.所以我想我的新项目是用一些奇怪的默认设置创建的.
有没有人知道我的项目有什么问题?
我试过检查Debug-> Exceptions中的方框.但即使我在try-catch
块中处理异常,执行也会中断; 这也不是我想要的.如果我没记错的话,在这个对话框中有一个名为"未处理的异常"的列或者类似的东西,这会让我感到非常兴奋.但在我的项目中只有一列("Thrown").
我认为在类(C#)中使用默认构造函数并不是强制性的.
那么,在那种情况下,我应该在课堂上有一个空构造函数,还是可以跳过它?
拥有一个空的默认构造函数是最佳做法吗?
Class test
{
public test()
{
}
......
}
Run Code Online (Sandbox Code Playgroud)
要么
Class test
{
......
}
Run Code Online (Sandbox Code Playgroud) 我遇到了问题AppDomain.CurrentDomain.BaseDirectory
.
有时路径以'\'结束,有时则不以.我找不到合理的理由.
如果我使用它会没事,Path.Combine
但我想做Directory.GetParent
,它产生不同的结果.
你有没有发现这个问题?
我可以以不同的方式获取应用程序的父目录吗?
我目前的黑客是:
var baseDir = AppDomain.CurrentDomain.BaseDirectory;
if (!baseDir.EndsWith("\\")) baseDir += "\\";
Run Code Online (Sandbox Code Playgroud) 当我在VS2015中导入旧解决方案时,我收到大量警告MSB3884警告:在构建解决方案时找不到规则集文件.
问:我怎样才能摆脱这个恼人的问题?
我想在VBA 7.0中创建一个无模式弹出对话框.到目前为止,最有希望的路线似乎是CreateDialog
.
首先我尝试CreateDialogW
并收到了Entry point not found for CreateDialogW in DLL
.
打开DLL后,我验证了此功能未列出.上面链接的MSDN参考显示User32作为此函数的DLL并列出函数名称CreateDialogW
和CreateDialogA
(Unicode/ansi),但它们未在我的计算机上的此DLL中列出(Win 7 professional,64bit).
所以,看的是功能列表是在DLL中,我看到的CreateDialogParam
和CreateDialogIndirectParam
函数(每ANSI和Unicode版本).
我一直在尝试遵循MSDN并将C示例转换为VB,但我在某处遗漏了某些东西而且我有点卡住,因为我不知道我做错了什么.代码编译并运行没有错误,但API调用没有任何反应 - 它执行但没有任何反应.
如果有人能给我一些正确方向的指示,我将非常感激.我当前的解决方法很糟糕,我真的很想按下这个项目.
Option Explicit
'Reference conversion of C to VB type declarations here
'http://msdn.microsoft.com/en-us/library/aa261773(v=vs.60).aspx
'Declare function to Win API CreateDialog function
'http://msdn.microsoft.com/en-us/library/ms645434(v=vs.85).aspx
Private Declare PtrSafe Function CreateDialog Lib "User32.dll" Alias "CreateDialogParamW" _
(ByVal lpTemplateName As LongPtr, _
ByRef lpDialogFunc As DIALOGPROC, _
ByVal dwInitParam As Long, _ …
Run Code Online (Sandbox Code Playgroud) 我有以下问题:
我想检查(C#)线程是否已完成执行,即线程方法是否已返回.我现在所做的就是打电话Thread.Join(1)
,但这会延迟1毫秒.有没有办法简单地检查线程是否已完成.检查Thread.ThreadState
似乎太麻烦了.
c# ×8
.net ×2
algorithm ×1
api ×1
c++ ×1
collections ×1
dialog ×1
double ×1
element ×1
installation ×1
modeless ×1
parsing ×1
path ×1
random ×1
thread-state ×1
threadpool ×1
vba ×1