Tag: C#的

Cmacros定义来确定大端还是小端?

是否有一行macros定义来确定机器的字节顺序。 我正在使用下面的代码,但将其转换为macros将太长。 unsigned char test_endian( void ) { int test_var = 1; unsigned char test_endian* = (unsigned char*)&test_var; return (test_endian[0] == NULL); }

在C#中dynamic枚举

如何在C#中基于数据库查找表中的值(使用企业库数据层)创builddynamic枚举(并随后使用枚举选项)? 例如,如果我在数据库中添加一个新的查找值,我不想在代码中添加额外的静态枚举值声明。 有这样的事情吗? 我不想创build一个代码生成静态枚举( 根据代码项目文章枚举代​​码生成器 – 从数据库查找表自动生成枚举代码 ),并希望它是完全dynamic的。

未定义的行为和序列点重新加载

请考虑以下主题的续篇: 以前的安装 未定义的行为和顺序点 让我们重温一下这个有趣而复杂的expression(斜体字是从上面的话题*微笑*中获得的): i += ++i; 我们说这调用了未定义的行为。 我假设说这个时候,我们隐含地认为i types是内置types之一。 如果i的types是用户定义的types呢? 说它的types是在这篇文章后面定义的Index (见下文)。 它会调用未定义的行为吗? 如果是,为什么? 这不等于写i.operator+=(i.operator++()); 甚至在句法上更简单i.add(i.inc()); ? 或者,他们是否也调用未定义的行为? 如果不是,为什么不呢? 毕竟,对象i在连续的序列点之间被修改两次 。 请回想一下经验法则: expression式只能在连续的“序列点之间修改一个对象的值 ,如果i += ++i是一个expression式,那么它必须调用未定义的行为i.operator+=(i.operator++());和i.add(i.inc());还必须调用undefined-行为似乎是不真实的(据我所知) 或者, i += ++i不是一个expression式开始? 如果是这样,那么它是什么, expression的定义是什么? 如果它是一个expression式,并且同时它的行为也是明确定义的,那么它意味着与某个expression式相关联的序列点的数量在某种程度上取决于expression式中涉及的操作数的types 。 我是否正确(甚至部分)? 顺便说一下,这个expression呢? //Consider two cases: //1. If a is an array of a built-in type //2. If a is user-defined […]

如何发布与JSON,jQuery的ASP.NET MVC控制器的复杂对象的数组?

我目前的代码如下所示。 如何将我的数组传递给控制器​​,以及我的控制器动作必须接受哪种参数? function getplaceholders() { var placeholders = $('.ui-sortable'); var result = new Array(); placeholders.each(function() { var ph = $(this).attr('id'); var sections = $(this).find('.sort'); var section; sections.each(function(i, item) { var sid = $(item).attr('id'); result.push({ 'SectionId': sid, 'Placeholder': ph, 'Position': i }); }); }); alert(result.toString()); $.post( '/portal/Designer.mvc/SaveOrUpdate', result, function(data) { alert(data.Result); }, "json"); }; 我的控制器操作方法看起来像 public […]

如何使用c#调用REST api?

这是迄今为止的代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System; using System.Net.Http; using System.Web; using System.Net; using System.IO; namespace ConsoleProgram { public class Class1 { private const string URL = "https://sub.domain.com/objects.json?api_key=123"; private const string DATA = @"{""object"":{""name"":""Name""}}"; static void Main(string[] args) { Class1.CreateObject(); } private static void CreateObject() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.Method […]

如何将.NET EXE反编译为可读的C#源代码?

几年前,我为客户编写了一个C#应用程序,但是我不再拥有源代码。 我所拥有的是我部署在客户端PC上的EXE。 有没有一种方法可以从EXE生成C#源代码?

最快的屏幕捕获方法

我想为Windows平台编写一个屏幕录像程序,但不确定如何捕获屏幕。 我知道的唯一方法是使用GDI,但我很好奇是否还有其他方法可以解决这个问题,如果有的话,哪个方法的开销最小? 速度是重中之重。 屏幕录制程序将用于录制游戏画面,但如果这样做缩小了选项的范围,我仍然可以接受任何其他不属于此范围的build议。 毕竟,知识并不坏。 编辑 :我碰到这篇文章: 各种捕获屏幕的方法 。 它向我介绍了使用Windows Media API的方法和使用DirectX的方法。 它在结论中提到禁用硬件加速可以大大提高捕获应用程序的性能。 我很好奇这是为什么。 任何人都可以为我填写缺失的空白吗? 编辑 :我读了像Camtasia的屏幕录像程序使用自己的捕获驱动程序。 有人能给我一个深入的解释,说明它是如何工作的,为什么它更快? 我也可能需要关于实现类似的指导,但是我确定无论如何都有现有的文档。 另外,我现在知道FRAPS如何logging屏幕。 它挂钩底层graphicsAPI从后台缓冲区读取。 据我所知,这是比从前缓冲区读取更快,因为你正在从系统RAM,而不是videoRAM读取。 你可以在这里阅读文章。

什么是最快的子stringsearchalgorithm?

好的,所以我不会听起来像一个白痴,我会更明确地陈述问题/要求: Needle(pattern)和haystack(text to search)都是C样式的以null结尾的string。 没有提供长度信息; 如果需要,它必须被计算。 函数应返回指向第一个匹配的指针,如果找不到匹配项,则返回NULL 。 故障情况是不允许的。 这意味着任何具有非恒定(或大的恒定)存储要求的algorithm都需要具有分配失败的回退情况(并且后备处理中的性能因此导致最坏情况的性能)。 实现是用C语言编写的,但是没有代码的algorithm(或者链接到这个)的一个很好的描述也不错。 …以及我所说的“最快”的意思是: 确定性O(n)其中n =干草堆长度。 (但是,如果将它们与更稳健的algorithm结合以提供确定性O(n)结果),则可以使用通常为O(nm)algorithm(例如滚动哈希)的想法。 从来没有执行过(可测量的; if (!needle[1])等几个时钟是可以的),比天真的蛮力algorithm更糟糕,特别是在非常短的针头上,这可能是最常见的情况。 (无条件繁重的预处理开销是不好的,因为试图以牺牲可能的针头为代价来提高病态针头的线性系数)。 给定一个任意的针和干草堆,相比或更好的性能(不比其他任何其他广泛实施的algorithm更长的search时间50%)。 除了这些条件之外,我将离开“最快”的开放式的定义。 一个好的答案应该解释为什么你考虑你build议“最快”的方法。 我目前的实现比glibc的双向实现运行速度大概慢10%到8倍(取决于input)。 更新:我目前的最优algorithm如下: 对于长度为1的针,请使用strchr 。 对于长度为2-4的针,使用机器字一次比较2-4个字节:预加载一个16位或32位整数的移位,并在每次迭代时从干草堆中循环旧字节输出/新字节。 干草堆的每个字节都只读一次,并对0(string结尾)和一个16位或32位比较进行检查。 对于长度大于4的针头,使用双向algorithm和一个仅适用于窗口最后一个字节的错误移位表(如Boyer-Moore)。 为了避免初始化一个1kb表的开销(这对于许多中等长度的针来说是一个净损失),我保留一个位数组(32字节)来标记移位表中的哪些入口被初始化。 未设置的位对应于从不出现在针中的字节值,可以进行全针长度的移位。 我脑海中留下的大问题是: 有没有办法更好地使用坏class表? Boyer-Moore通过向后扫描(从右到左)充分利用它,但是双向需要从左到右的扫描。 在一般情况下,我发现的唯一两个可行的候选algorithm(没有内存不足或二次性能条件)是有序字母上 的双向和string匹配 。 但是,在那里容易检测到不同的algorithm是最优的? 当然,空间algorithm中的许多O(m) (其中m是针长)可用于m<100左右。 如果有一个简单的testing针可能只需要线性时间,那么也可以使用最差二次方法。 奖励积分为: 你可以通过假设针和干草堆都是格式良好的UTF-8来提高性能吗? (使用字节长度不同的字符时,良好的结构会在针头和干草堆之间施加一些stringalignment要求,并且在遇到不匹配的头字节时允许自动2-4字节的移位。最大的后缀计算,好的后缀转换等已经给你各种algorithm?) 注意:我很清楚大部分的algorithm,只是没有在实践中performance如何。 这里有一个很好的参考,所以人们不会给我algorithm的参考作为评论/答案: http : //www-igm.univ-mlv.fr/~lecroq/string/index.html

什么是std :: move(),什么时候应该使用?

它是什么? 它有什么作用? 什么时候使用? 良好的联系表示赞赏。

如何生成和validation软件许可证密钥?

我目前正在开发一款产品(用C#开发),可以免费下载和安装,但是版本非常有限。 要访问所有function,用户必须支付许可证费用并获得一个密钥。 然后将该密钥input到应用程序中以“解锁”完整版本。 因为使用像这样的许可证密钥是平常我想知道: 通常如何解决? 我如何生成密钥,以及如何validation应用程序? 我怎样才能避免在互联网上发布一个关键字,并被没有支付许可证的其他人使用(一个关键基本上不是他们的)。 我想我也应该以某种方式将应用程序的版本绑定到关键字上,这样才有可能在function版本中为新的关键字收费。 还有什么我应该考虑在这种情况下?