Tag: .net

数独有效性检查算法 – 此代码如何工作?

我正在阅读这里发布的一个问题: C#中的数独算法 其中一个解决方案是这段代码。 public static bool IsValid(int[] values) { int flag = 0; foreach (int value in values) { if (value != 0) { int bit = 1 << value; if ((flag & bit) != 0) return false; flag |= bit; } } return true; } 这个想法是它将检测值数组中的重复项; 但是我不知道有多少我不知所措。 谁可以给我解释一下这个? 编辑:谢谢大家。 这么多很棒的答案,我不知道如何选择一个。 它现在非常有意义。

在运行时将成员添加到动态对象

我正在探索.NET 4.0中的DynamicObject模型。 应用程序是通过某种text / xml文件描述对象的应用程序,程序必须在读取该文件时创建对象。 使用DynamicObject,我们可以轻松添加成员,因为我们知道成员的名称是先验的。 但是,如果我们甚至不知道要添加的成员的名称呢? 有没有办法让这种动态变化? 例如,假设我需要使用成员’Property1’,’Property2’创建一个对象,使用’PropertyA’创建另一个对象,并使用text / XML文件描述’PropertyB’。 如何根据此信息动态创建对象? 更新我从这篇文章中得到了一些想法: http : //www.codeproject.com/KB/cs/dynamicincsharp.aspx 这个实现允许我做类似以下的事情: dynamic d = new PFDynamicChannel(); PFCouplings c = ((PFChannel)d).Coupling; d.NewProperty = “X”; 我不想使用字典的原因是使用TryGetMember和TrySetMember方法,我可以覆盖,我可以在其中引发对程序至关重要的事件。 这样,我可以inheritance基类(PFChannel),但我也可以动态添加成员。 但是,我的问题是,在运行时之前我不会知道新的属性名称。 而且,我实际上并不认为动态对象允许我动态添加新属性。 如果是这种情况,我如何利用ExpandoObject来提供这种能力呢?

C#最快交集的2组排序数字

我正在计算我的应用程序的时间关键部分中的两组排序数字的交集。 这个计算是整个应用程序的最大瓶颈,所以我需要加快速度。 我尝试过一些简单的选项,目前我正在使用它: foreach (var index in firstSet) { if (secondSet.BinarySearch(index) < 0) continue; //do stuff } firstSet和secondSet都是List类型。 我也尝试过使用LINQ: var intersection = firstSet.Where(t => secondSet.BinarySearch(t) >= 0).ToList(); 然后循环通过intersection 。 但是,由于这两个集合都已排序,我觉得有更好的方法。 请注意,我无法从集中删除项目以使其变小。 两套通常每件约50件。 请帮助我们,因为我没有太多时间来完成这件事。 谢谢。 注意:我这样做大约530万次。 所以每微秒都很重要。

如何在不阻止UI的情况下等待线程完成

我希望我的程序在下面的行之后等待 frmProgressBarObj = PullMSI.ExtractByMSIName(“products.txt”, false); 如上所述,方法是通过StartProcessWithProgress()方法在内部调用线程。 我希望在执行代码逻辑-2行之前完成该线程。 同时,它不应该停止由frmProgressBar.UpdateProgress()完成UI更新。 我该怎么做呢? namespace NS1 { public partial class frmMain : Form { private void button1_Click(object sender, EventArgs e) { frmProgressBar frmProgressBarObj = PullMSI.ExtractByMSIName(“products.txt”, false); //code logic – 2 MessageBox.Show(“This is executing immediately. I want to wait until above thread is complete”); } } public partial class frmProgressBar : […]

使用AppDomain加载/卸载外部程序集

我的方案如下: 创建新的AppDomain 将一些组件加载到其中 加载dll做一些魔法 卸载AppDomain以释放内存和已加载的库 下面是我正在尝试使用的代码 class Program { static void Main(string[] args) { Evidence e = new Evidence(AppDomain.CurrentDomain.Evidence); AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation; Console.WriteLine(“Creating new AppDomain”); AppDomain newDomain = AppDomain.CreateDomain(“newDomain”, e, setup); string fullName = Assembly.GetExecutingAssembly().FullName; Type loaderType = typeof(AssemblyLoader); var loader = (AssemblyLoader)newDomain.CreateInstanceFrom(loaderType.Assembly.Location, loaderType.FullName).Unwrap(); Console.WriteLine(“Loading assembly”); Assembly asm = loader.LoadAssembly(“library.dll”); Console.WriteLine(“Creating instance of Class1”); […]

使用IHttpAsyncHandler异步调用WebService

这是基本设置。 我们有一个ASP.Net WebForms应用程序,其页面包含一个需要访问外部Web服务的Flash应用程序。 由于(安全我认为)Flash的限制(不要问我,我根本不是Flash专家),我们无法直接从Flash连接到Web服务。 解决方法是在ASP.Net中创建Flash应用程序将调用的代理,然后调用WebService并将结果转发回Flash应用程序。 WebSite虽然拥有非常高的流量,但问题是,如果Web服务完全挂起,那么ASP.Net请求线程将开始备份,这可能导致严重的线程饥饿。 为了解决这个问题,我决定使用专为此目的而设计的IHttpAsyncHandler 。 在其中,我将使用WebClient异步调用Web服务并将响应转发回来。 关于如何正确使用IHttpAsyncHandler的网上很少有样本,所以我只是想确保我做错了。 我在这里的示例节目中使用我的用法: http : //msdn.microsoft.com/en-us/library/ms227433.aspx 这是我的代码: internal class AsynchOperation : IAsyncResult { private bool _completed; private Object _state; private AsyncCallback _callback; private readonly HttpContext _context; bool IAsyncResult.IsCompleted { get { return _completed; } } WaitHandle IAsyncResult.AsyncWaitHandle { get { return null; } } Object IAsyncResult.AsyncState { […]

Activator.CreateInstance – 如何创建具有参数化构造函数的类的实例

我已经在网上阅读了一些关于这个主题的内容,但发现没有一个对我有用。 我要做的是创建一个运行时类型的类。 我使用Activator.CreateInstance ,它适用于具有不包含参数的构造函数的类。 对于那些有参数的人会抛出exception,有没有办法绕过这个? 我非常乐意将空值或空值传递给ctor,只要我可以创建类本身。

类库中的引用不会复制到正在运行的项目bin文件夹中

我有一个代表我的逻辑层的类库。 对于那个库,我为Google.Apis.Analytics.v3添加了一个nuget包 – 它安装了包及其所有依赖项。 我有一个控制台应用程序,它使用该逻辑类库(常规引用)。 一切都写得很好。 问题是在运行时它抛出了一个exception,即找不到Google.Apis.dll。 此DLL是与nuget一起下载的依赖项。 检查BIN文件夹,我发现在类库bin文件夹中存在此DLL,但在控制台应用程序BIN文件夹中却没有(而其他相关的DLL是)。 所以这意味着在编译期间不是所有引用都被复制了。 我在网上搜索过,找到了所有不起作用的解决方法(比如手动编辑项目文件并删除该dll定义中的真正xml行)。 我最终做的是在我的控制台应用程序中添加相同的nuget库 – 它可以工作,但感觉有点脏,而不是应该的方式。 我认为控制台应用程序是客户谁应该从该逻辑类库获取它的服务,应该知道它的东西没有“客户”担心它。 此外,该控制台应用程序不是唯一一个将使用该服务的人,我也计划使用该function的网络应用程序 – 所以我需要将相同的nuget添加到该Web应用程序 – 再次,感觉有点乱…… 只有我吗? 这是正确的方法吗? 我正在考虑编写一个WCF项目来处理这个function – 但这似乎只是在function方面的一些开销,并且可能会减慢我的工作流程,以便在我看来保持“更清洁”。 我只是过度思考了吗? 谢谢

LINQ之外的产量是否有用?

当我认为我可以使用yield关键字时,我退后一步,看看它将如何影响我的项目。 我总是最终返回一个集合而不是yeilding,因为我觉得保持yeilding方法状态的开销不会给我带来太大的影响。 在几乎所有我返回集合的情况下,我觉得90%的时间,调用方法将迭代集合中的所有元素,或者将在整个集合中寻找一系列元素。 我确实理解它在linq中的用处,但我觉得只有linq团队正在编写这样复杂的可查询对象,这些对象的产生是有用的。 有没有人写过像linq这样的产品有用吗?

C#4.0和.Net 3.5

因此,我们终于在一些开发人员工作站上安装了VS2010,并且可以使用C#4.0function。 虽然我们开发的大部分内容仍然需要暂时以.Net 3.5为目标。 当我开始一个新项目并将目标设置为.Net 3.5时,它仍然允许我使用C#4.0,如动态。 因此,您可以在针对.net 3.5时使用C#4.0function吗?这些function是否适用于.Net 4.0不可用的环境? 谢谢。