Tag: .net 4.0

如果多个成员具有相同的属性,如何抛出编译器错误

简单的问题,如何强制C#编译器抛出编译错误。 更新:也许最好使用Assert.Fail()代替? 我有一个自定义属性,只应该应用于一个类的一个成员。 在我的另一个类的静态方法中,如果有多个成员应用了该属性,它会查找该成员并希望它失败(不抛出exception)。 public class Foo { [MyCustomAttribute] public String FooString { get; set; } [MyCustomAttribute] public String OtherFooString { get; set; } } public class Bar where T : class, new() { static Bar() { //If more than one member of type Foo has MyCustomAttribute //applied to it compile error or Assert.Fail()? } […]

entity frameworkv4.1 LIKE

如何构建我的查询以产生输出SQL查询,如: SELECT [viewRegisters].[Id] AS [IdRegister] WHERE Name LIKE ‘%a%bc’ 要么 SELECT [viewRegisters].[Id] AS [IdRegister] WHERE Name LIKE ‘a%b%c’ 要么 SELECT [viewRegisters].[Id] AS [IdRegister] WHERE Name LIKE ‘a%b%c%’ 我正在使用.Net Framework 4.0,Entity Framework v4.1和C#。 EF v4.1转换此类型的linq查询: ((IQueryable)Data).Where(z => z.Field.Contains(“a%b%c%”)); 成: SELECT [viewRegisters].[Id] AS [Id] WHERE Name LIKE N’a~%b~%c~%’ ESCAPE N’~’ 那不是我想要的。 我希望能够像在DB中直接使用“百分比”符号一样。

方法推理不适用于方法组

考虑 void Main() { var list = new[] {“1”, “2”, “3”}; list.Sum(GetValue); //error CS0121 list.Sum(s => GetValue(s)); //works ! } double GetValue(string s) { double val; double.TryParse(s, out val); return val; } CS0121错误的描述是 以下方法或属性之间的调用不明确: ‘System.Linq.Enumerable.Sum(System.Collections.Generic.IEnumerable, System.Func)’和’System.Linq.Enumerable.Sum(System.Collections.Generic.IEnumerable, System.Func )’ 我不明白的是,什么信息s => GetValue(s)给编译器简单的GetValue不 – 对于前者不是后者的语法糖?

使用异步调用时exception处理的良好模式

我想使用Web API,我看到很多人推荐System.Net.Http.HttpClient 。 那很好……但我只有VS-2010,所以我还不能使用async/await 。 相反,我想我可以将Task组合使用到ContinueWith 。 所以我尝试了这段代码: var client = new HttpClient(); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue(“application/json”)); client.GetStringAsync(STR_URL_SERVER_API_USERS).ContinueWith(task => { var usersResultString = task.Result; lbUsers.DataSource = JsonConvert.DeserializeObject<List>(usersResultString); }); 我的第一个观察是认识到如果URL不可用它不会产生任何错误,但可能会有更多这样的错误…… 所以我试图找到一种方法来处理这种异步调用的exception(特别是对于HttpClient)。 我注意到“任务”有IsFaulted属性和AggregateException可能会被使用,但我不确定如何。 另一个观察是GetStringAsync返回Task ,但GetAsync返回Task 。 后者可能更有用,因为它提供了一个StatusCode 。 您能否共享一个关于如何正确使用异步调用并以良好方式处理exception的模式? 基本的解释也将受到赞赏。

对于未知用户,ValidateCredentials返回true?

我在这里使用PrincipalContext.ValidateCredentials看到一些奇怪的行为。 设置是父/子设置中的两个Active Directory域(因此我们有主域company.com和子域development.company.com )。 当我针对主域validation凭据时, ValidateCredentials按预期运行,对于良好的用户/传递对返回true,对其他任何对返回false。 但是,如果我在子域中validation用户,则ValidateCredentials将为良好的用户名/密码和无效用户返回true。 如果我向有效用户提供无效密码,则会正确返回false。 现在我首先通过UserPrincipal.FindByIdentity()解决它,如果用户存在,那么调用ValidateCredentials – 但我想了解发生了什么。 我看过的另一个解决方法是将用户名作为domain\username传递给ValidateCredentials的MSDN条目 : 在此函数的每个版本中,userName字符串可以是各种不同格式之一。 有关可接受格式类型的完整列表,请参阅ADS_NAME_TYPE_ENUM文档。 …列出了这种forms的用户名。 但这会导致ValidateCredentials始终返回true,无论我传入的用户名和密码的组合如何。 相关代码是: bool authenticated = false; // Various options tried for ContextOptions, [etc] inc. explicit username/password to bind to AD with — no luck. using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain, null, ContextOptions.Negotiate, null, null)) { log(pc.ConnectedServer + ” […]

如何在C#中获取网络摄像头图像?

我正在使用C#和.Net4.0开展在线video会议项目。 我想要一个库或代码,我可以用它来以不同的forms每秒收集网络摄像头图像。 我通过使用AVICAP32尝试这个,我们在其中发送消息用于不同目的,如复制或编辑帧。但是在这里我们必须在创建处理程序时传递picturebox的引用,如下所示: mCapHwnd = capCreateCaptureWindowA(“0”, 268435456 | 1073741824, 0, 0, 640, 480,picturebox1.Handle.ToInt32(), 0); 使用这些命令我能够捕获图像,但问题出现在我最小化图片框forms。 那时候不会创造新的形象。 我认为这是因为我最小化了表单,当它从这个剪贴板复制图像时它没有显示任何内容。 我怎么解决这个问题 。 任何类型的帮助将不胜感激。 谢谢srdusad

什么是“C#编译器作为服务”的状态

回到2008年的PDC,在Anders Hejlsberg的C#期货谈话中,他谈到了重写C#编译器并提供“编译器即服务”,当然我在他们针对C#4.0时间框架时给人的印象。 … 那么,有谁知道这是什么状态? 它似乎没有在CTP中存在,除了链接到2008 PDC会话video(大约一个小时)之外,几乎没有关于WEB的信息。 这个倡议变暗了吗?

C#如何正确处理SmtpClient?

VS 2010代码分析报告如下: 警告4 CA2000:Microsoft.Reliability:在方法’Mailer.SendMessage()’中,对象’client’未沿所有exception路径放置。 在对所有引用超出范围之前,在对象’client’上调用System.IDisposable.Dispose。 我的代码是: public void SendMessage() { SmtpClient client = new SmtpClient(); client.Send(Message); client.Dispose(); DisposeAttachments(); } 我该如何正确处理客户? 更新:回答Jons问题,这里是dispose附件function: private void DisposeAttachments() { foreach (Attachment attachment in Message.Attachments) { attachment.Dispose(); } Message.Attachments.Dispose(); Message = null; } 最后更新全class上市(简称) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Mail; public class Mailer { public MailMessage […]

正确处理和删除对UserControls的引用,以避免内存泄漏

我正在使用Visual c#express 2010在c#中开发一个Windows窗体应用程序(.NET 4.0)。我无法释放分配给UserControls的内存我不再使用了。 问题: 我有一个FlowLayoutPanel,显示自定义UserControls。 FlowLayoutPanel显示搜索结果等,因此必须重复更新显示的UserControl集合。 在创建和显示每个新的UserControl集之前,在我的FlowLayoutPanel的ControlCollection(Controls属性)中当前包含的所有控件上调用Dispose(),然后在同一ControlCollection上调用Clear()。 这似乎不足以处理UserControls使用的资源,因为每个新的UserControls集都被创建并添加到我的ControlCollection中, 我的UserControls似乎也没有被垃圾收集声明。 应用程序的内存使用量在很短的时间内急剧攀升,然后达到稳定状态,直到我显示另一个列表。 我还用.NET Memory Profiler分析了我的应用程序,它报告了许多可能的内存泄漏(见下节)。 我认为出了什么问题: 我错了。 问题是使用foreach构造迭代ControlCollection并在其控件上调用Dispose()导致的错误,Hans Passant在他的回答中描述了这个错误。 问题似乎是由我的UserControls中使用的ToolTip引起的。 当我删除这些时,我的UserControls似乎被垃圾收集声明。 .NET内存分析器证实了这一点。 我早期测试中的问题1和6(见下节)不再出现​​,并报告了一个新问题: 未释放的实例(释放资源并删除外部引用)7种类型的实例已被垃圾收集而未正确处理。 请查看以下类型以获取更多信息。 ChoiceEditPanel(inheritance),NodeEditPanel(inheritance),Button,FlowLayoutPanel,Label,> Panel,TextBox 即使工具提示的参考已经消失,这不是一个长期解决方案,但当我不再需要时,仍然存在确定性地处理我的UserControls的问题。 但是,删除对工具提示的引用并不重要。 代码和更多细节 我使用一个名为NodesDisplayPanel的UserControl,它充当FlowLayoutPanel的包装器。 这是我的NodesDisplayPanel类中的方法,用于清除FlowLayoutPanel中的所有控件: public void Clear() { foreach (Control control in flowPanel.Controls) { if (control != NodeEditPanel.RootNodePanel) { control.Dispose(); } } flowPanel.Controls.Clear(); // widthGuide is used to […]

如何检查字节数组是否是有效图像?

我知道没有用于检查的.Net函数,但是在我使用字节数组之前,是否存在一种算法或简单有效的方法来检查字节是否是有效图像。 我需要这个,因为我正在向不断收听客户端的服务器发送不同的命令,其中一个命令是获取服务器计算机的屏幕截图。