IEnumerable null合并扩展

在经过foreach或LINQ查询迭代之前,我经常面临检查IEnumerable是否为null的问题,然后我经常会遇到这样的代码: var myProjection = (myList ?? Enumerable.Empty()).Select(x => x.Foo)… 因此,我想将此扩展方法添加到Extensions类: public static class MyExtensions { public static IEnumerable AsEmptyIfNull(this IEnumerable source) { return source ?? Enumerable.Empty(); } } 在我看来这个代码时会立即出现一个小问题,即,考虑到扩展方法的“实例方法方面” ,它应该仅仅作为一个静态方法来实现,否则这样的东西是完全合法的: IEnumerable list = null; list.AsEmptyIfNull(); 你看到使用它有任何其他缺点吗? 如果大量使用,这种扩展会导致开发人员出现某种不良趋势吗? 奖金问题: 你能建议一个更好的名字吗? 🙂 (英语不是我的第一语言,那么我在命名方面不太好…) 提前致谢。

两个方法与ref对象par和没有?有什么区别?

我想知道以下方法在引用对象参数方面的区别是什么: public void DoSomething(object parameter){} 和 public void DoSomething(ref object parameter){} 如果我想更改object的引用而不是覆盖同一引用中的对象,我应该使用ref object parameter吗?

C#中的只读文本框

在C#中 ,我正在为一个带有两个文本框的LAN信使创建一个表单窗口。 我需要创建一个特定的文本框作为只读,但提交给它的任何文本都显示为灰色,这是不可取的。 有什么办法可以预防吗?

如何加载IEnumerable 类型的相关实体

我正在尝试加载SingleOrDefault实体的相关实体,但是我收到以下exception: IEnumerable类型的导航属性不是ICollection类型的单个实现 我已经尝试过这几种方法,并最终针对上下文针对每个查询获得相同的错误(我在评论中包含了其他方式)。 using(var context = CustomObjectContextCreator.Create()) { return context.Job.Include(“Surveys”).Include(“SiteInfoes”) .Where(r => r.Jobid == jobId).SingleOrDefault(); //context.ContextOptions.LazyLoadingEnabled = false; //var Job = context.Job.Where(r => r.Jobid == jobId).SingleOrDefault(); //context.LoadProperty(Job, “Surveys”); //context.LoadProperty(Job, “SiteInfoes”); //var Job = (from j in context.Job // .Include(“Surveys”) // .Include(“SiteInfoes”) // select j).SingleOrDefault(); //var Job = context.Job.Where(r => r.Jobid == jobId).SingleOrDefault(); //var surveys = […]

entity framework的通用插入或更新

假设我有一个插入方法: public T Add(T t) { context.Set().Add(t); context.SaveChanges(); return t; } 一般的更新: public T Update(T updated,int key) { if (updated == null) return null; T existing = _context.Set().Find(key); if (existing != null) { context.Entry(existing).CurrentValues.SetValues(updated); context.SaveChanges(); } return existing; } 我想将它们组合成一个接受任何实体方法的SaveOrUpdate : 我如何才能最好地实现这一目标,并且有一种更有效的方法可以避免往返数据库,而不是使用context.Set().Find(key)

程序自动化表单字段输入和网页结果检查

我正在尝试使用C#(可能使用WinForms)创建一个程序,该程序将在特定网站的表单字段中输入许可证号,并validation许可证号是否是当前有效的许可证。 我不确定从哪里开始,因为我甚至无法在网站的源代码中找到表单字段ID,并且不确定网站使用什么技术。 此外,该程序的目的是输入许可证号列表并返回每个许可证的名称和validation状态。 数据源是网站。 关于如何解决这个问题的任何信息都将非常感激,我是一名中级C#开发人员 – 主要在ASP.Net工作,但感觉Winforms可能更适合这个项目。 亲切的问候

LINQ to SQL – 更新期间的DuplicateKeyException

下面列出的代码尝试更新数据库中的行,但会引发exception: System.Data.Linq.DuplicateKeyException:无法添加具有已在使用的键的实体 我见过的大多数示例都是查询数据库以获取实体的实例,修改某些实例的属性,然后更新它。 在这里,我完全从不同的源获取对象(它是从XML文件中解析的)并查询是否已经有一行用于此数据。 如果有,我正在设置主键并尝试运行更新。 这样做的正确方法是什么? 这是代码的修剪版本: Customer customer = new Customer(); // Customer has a database generated // identity column called CustomerId // populate customer object customer.Name = “Mr. X”; customer.Email = “x@company.com”; // etc. // is customer already in database? // identify customer by email var results = ctx.Where(c => c.Email == customer.Email); […]

Sql Server临时表消失

我正在创建一个临时表#ua_temp,它是常规表的子集。 我没有收到错误,但是当我在第二步尝试从#ua_temp中选择时,它没有找到。 如果删除#,则会创建名为ua_temp的表。 我使用了与其他地方的SELECT INTO创建表完全相同的技术。 它运行正常,所以我不认为它与数据库设置有任何关系。 有谁能看到这个问题? // Create temporary table q = new StringBuilder(200); q.Append(“select policy_no, name, amt_due, due_date, hic, grp, eff_dt, lis_prem, lis_grp, lis_co_pay_lvl, “); q.Append(“lep_prem, lapsed, dn_code, [filename], created_dt, created_by “); q.Append(“into #ua_temp from elig_ua_response “); q.Append(“where [filename] = @fn1 or [filename] = @fn2 “); sc = new SqlCommand(q.ToString(), db); sc.Parameters.Add(new SqlParameter(“@fn1”, […]

如何检索嵌入的xml资源?

我在我的类库中添加了一个XML文件作为嵌入式资源,方法是使用Visual Studio中的项目属性访问,然后使用Resources | 添加资源| 添加现有文件… 我试图使用以下代码访问该文件,但我不断返回null引用。 有人有主意吗? var path = Server.MapPath(“~/bin/MyAssembly.dll”); var assembly = Assembly.LoadFile(path); var stream = assembly.GetManifestResourceStream(“MyNamespace.filename.xml”);

通过TFS API从Visual Studio Online获取构建定义

我在通过TFS API从Visual Studio Online项目检索构建信息时遇到问题。 我似乎可以连接到项目,并找到预期的团队项目集合和团队项目,但是尽管项目有两个构建定义和许多构建,但在查询构建时,TFS API总是向我返回零长度数组定义或构建。 该项目是一个Git项目。 我的生产代码类似于我为试图调试问题而编写的测试代码: var tfsUri = new Uri(“https://[my project].visualstudio.com”); var tcs = new TfsConfigurationServer(tfsUri); var teamProjCollections = tcs .CatalogNode .QueryChildren( new[] { CatalogResourceTypes.ProjectCollection }, false, CatalogQueryOptions.None) .Select(collectionNode => new Guid(collectionNode.Resource.Properties[“InstanceId”])) .Select(collectionId => tcs.GetTeamProjectCollection(collectionId)); var tpc = teamProjCollections .Single(x => x.Name == @”[my project].visualstudio.com\DefaultCollection”); var newTeamProjects = tpc .CatalogNode .QueryChildren( new[] […]