Tag: c# 4.0

带有url的File.Copy c#

可以使用带有C#的File.Copy的两个URL吗? 我得到了不同的错误: 不支持URI格式 不支持给定路径的格式。 有一个类似的问题,但没有回答。 我希望从server1中的目录复制到另一个服务器,并且URL是http 谢谢

C#比较两个时间间隔之间的时间

尝试比较两次之间的给定时间,看它是否在这些间隔内。 例如,如果给定时间是00:00,我需要知道它是否在21:00:00到7:00之间。 尝试TimeSpan.Compare没有锁,也使用>或<时间部分。 例如给定间隔: 7:00:00 to 19:00:00 19:00:00 to 21:00:00 21:00:00 to 7:00:00 时间比较: 00:00:00和01:00:00 任何帮助将不胜感激。 更新的问题: 看起来要求很安静含糊。 要求基本上是通过Time(TimeSpan)并与两个TimeSpan间隔进行比较,以查看它们是否落入这些间隔。 例如,如果员工在下面的不同时段工作,他们会说不同的津贴: 日期范围:2012-01-01至2012-31 19:00:00 to 21:00:00 ($10.00) 21:00:00 to 7:00:00 ($11.00) 7:00:00 to 19:00:00 ($12.00) 要计算员工的小时费率,我需要检查员工是否工作 日期范围:2012-01-01至2012-31 在时间范围之上。 并相应地应用$ Rate。

C#双加 – 奇怪的行为

public static void Main() { Dictionary values = new Dictionary(); values.Add(“a”, 0.002); values.Add(“b”, 0.003); values.Add(“c”, 0.012); // Summing iteratively. double v1 = 615.0; foreach (KeyValuePair kp in values) { v1 += kp.Value; } Console.WriteLine(v1); // Summing using the Sum method. double v2 = 615.0; v2 += values.Values.Sum(); Console.WriteLine(v2); Console.ReadLine(); } 当我在调试器中查看v1的值时,它给出的值为615.01699999999994,但对于v2,它给出的值为615.017。 由于某种原因,Sum方法产生准确的结果,而迭代地对它们求和则不然。 (当我打印这两个值时它们是相同的,但我认为这是由于WriteLine方法所做的一些舍入。) 有谁知道这里发生了什么?

在winform appliaction中打开带有表单名称的表单

我想问一下,如何在winform c#中使用帮助或类名打开表单? 我有三种不同的forms 用户管理 GroupsManagement LocationManagement 我从数据库获得这三种forms的许可 在菜单中单击我填充标签属性与此类型的表单 tsmMain.Tag = item.PermissionName tsmMain.Click += new EventHandler(tsmMain_Click); 我想要做的是在按钮点击动态打开表单并删除这些条件? 我可以用reflection做这个吗? ToolStripMenuItem aa = sender as ToolStripMenuItem; var tag = aa.Tag; if (tag == “User Management”) { UserManagement oUserForm = new UserManagement(); oUserForm.Show(); } if (tag == “Groups Management”) { GroupManagement oGroupForm = new GroupManagement(); oGroupForm.Show(); }

让FileHelpers 2.0处理带有多余逗号的CSV文件

我目前正在使用FileHelpers库(v2.0.0.0)来解析CSV文件。 CSV文件映射到具有少量公共属性的类,假设有N个 。 问题是,默认情况下,FileHelpers似乎无法正确处理用户指定具有多于N-1个逗号的CSV文件的情况。 其余的逗号只会附加到最后一个属性值。 我认为这必须可以通过FileHelpers的属性进行配置,但我没有看到任何会忽略记录中没有匹配属性的字段。 我查看了RecordCondition ,但使用像ExcludeIfEnds(“,”)这样的东西看起来会完全跳过这行,如果它以逗号结尾,但我只是希望它们被剥离。 有可能我唯一的办法是预处理文件并删除任何尾随的逗号, 这完全没问题 ,但我想知道FileHelpers是否也可以这样做,也许我只是在文档中没有看到它。

RegLoadAppKey在32位操作系统上运行良好,在64位操作系统上失败,即使两个进程都是32位

我正在使用.NET 4和新的RegistryKey.FromHandle调用,因此我可以从使用RegLoadAppKey打开软件注册表文件获取hKey,并使用现有的托管API对其进行操作。 我一开始以为这只是一个被破坏的DllImport的问题而且我的调用在params中有一个无效的类型或者缺少MarshalAs或者其他什么,但是查看其他注册表函数及其DllImport声明(例如,在pinvoke.net上),我没有看到还有什么要尝试(我已经将hKey作为int和IntPtr返回,两者都在32位操作系统上运行并在64位操作系统上失败) 我已经把它归结为一个简单的repro案例 – 它只是尝试创建一个’随机’子键然后写一个值。 它在我的Win7 x86机箱上工作正常,在Win7 x64和2008 R2 x64上运行失败,即使它仍然是32位进程,甚至是从32位cmd提示符运行。 编辑:如果它是64位进程,它也会以相同的方式失败。 编辑:如果传入的文件是空的,它工作正常 – 问题的情况是现有的软件注册表配置单元。 我从2008 r2(x64)和WHS v1(x86)iso中提取了’裸’软件注册表配置单元文件,两者都有同样的问题。 在Win7 x86上: INFO: Running as Admin in 32-bit process on 32-bit OS Was able to create Microsoft\Windows\CurrentVersion\RunOnceEx\a95b1bbf-7a04-4707-bcca-6aee6afbfab7 and write a value under it 在Win7 x64上,为32位: INFO: Running as Admin in 32-bit process on 64-bit OS Unhandled Exception: […]

LINQ表达式转换/从Int到String的Concat

我想用Concat两个表达式作为最终表达式 Expression<Func> 所以我创建了表达式belwo代码只适用于字符串类型,如果我将memberExpression作为Int32或DateTime抛出exception 类型’System.Int32’的表达式不能用于方法’System.String Concat(System.String,System.String)’的’System.String’类型的参数 如果我将表达式转换为 var conversion = Expression.Convert(memberExpression, typeof (string)); 获取没有强制运算符是在类型’System.Int32’和’System.String’之间定义的。 请帮我解决 码 MethodInfo bodyContactMethod = typeof (string).GetMethod(“Concat”,new[] {typeof (string), typeof (string)}); ParameterExpression parameter = Expression.Parameter(typeof (T)); body = Expression.Call(bodyContactMethod, cons, memberExpression); return Expression.Lambda<Func>(body, parameter);

奇怪的系统.__佳能exception

我有一个使用单例类ThreadQueue的Windows服务。 当服务启动时,它调用ThreadQueue.Start()然后该类接受并将限制并发的任务排队到可配置数量的线程。 ThreadQueue.Start()只在服务启动时调用一次。 有时,在运行几个小时后,我收到以下exception: Application: myservice.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.NullReferenceException Stack: at Apollo.Business.Framework.Threading.ThreadQueue.ThreadQueue`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Start() at System.Threading.ThreadHelper.ThreadStart_Context(System.Object) at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at System.Threading.ThreadHelper.ThreadStart() 什么是System.__Canon和什么使这个调用作为类型参数传递给它? 谁能摆脱任何光明?

C# – 装箱/拆箱/类型转换的问题。 我不明白

我很难理解这一点。 请考虑以下示例: protected void Page_Load(object sender, EventArgs e) { // No surprise that this works Int16 firstTest = Convert.ToInt16(0); int firstTest2 = (int)firstTest; // This also works object secondTest = 0; int secondTest2 = (int)secondTest; // But this fails! object thirdTest = Convert.ToInt16(0); int thirdtest2 = (int)thirdTest; // It blows up on this line. } […]

未在Visual Studio 2010中加载引用DLL

我正在使用VS2010中的C#4.0项目,需要使用一些旧的DLL,其中包含在VS2008上使用C#3.5创建的控件。 当我第一次将DLL添加到引用时,我能够通过intellisense看到命名空间并创建其中一个控件的实例,但是当我去构建时,它会给我以下错误: The type or namespace name ‘BCA’ could not be found (are you missing a using directive or an assembly reference?) 我已经有一个针对该命名空间的using指令,现在用红色加下划线,表明VS无法找到它。 现在,intellisense根本不会接受那个命名空间。 我甚至尝试将控件添加到工具箱(它工作),但是当我将它们拖到GUI时,它说它无法找到DLL引用,即使它显然知道它在哪里。 我甚至尝试将目标框架更改为3.5,但仍然具有相同的结果。 有关为什么会发生这种情况的任何想法? 编辑 – 我注意到在VS输出的​​csc.exe参数中,它没有我正在尝试使用的DLL的任何/引用条目。 当我在VS2008中创建相同的基本项目时,存在这些条目。 此外,我可以成功引用VS2010中的DLL项目中的DLL …它似乎只是WinForms项目不起作用。