小编Meh*_*ari的帖子

为什么要使用Expression <Func <T >>而不是Func <T>?

我理解lambdas FuncAction代表们.但表达方式让我很难过.在什么情况下你会使用一个Expression<Func<T>>而不是一个普通的老年人Func<T>

c# lambda delegates expression-trees

910
推荐指数
10
解决办法
21万
查看次数

如果我在Try块中返回一个值,那么finally语句中的代码会触发吗?

我正在为一位朋友审查一些代码,并说他在try-finally块中使用了一个return语句.即使try块的其余部分没有,Finally节中的代码是否仍会触发?

例:

public bool someMethod()
{
  try
  {
    return true;
    throw new Exception("test"); // doesn't seem to get executed
  }
  finally
  {
    //code in question
  }
}
Run Code Online (Sandbox Code Playgroud)

.net c# exception-handling try-catch

228
推荐指数
7
解决办法
7万
查看次数

LINQ - 左连接,分组依据和计数

假设我有这个SQL:

SELECT p.ParentId, COUNT(c.ChildId)
FROM ParentTable p
  LEFT OUTER JOIN ChildTable c ON p.ParentId = c.ChildParentId
GROUP BY p.ParentId
Run Code Online (Sandbox Code Playgroud)

如何将其转换为LINQ to SQL?我被困在COUNT(c.ChildId),生成的SQL似乎总是输出COUNT(*).这是我到目前为止所得到的:

from p in context.ParentTable
join c in context.ChildTable on p.ParentId equals c.ChildParentId into j1
from j2 in j1.DefaultIfEmpty()
group j2 by p.ParentId into grouped
select new { ParentId = grouped.Key, Count = grouped.Count() }
Run Code Online (Sandbox Code Playgroud)

谢谢!

.net c# linq linq-to-sql

165
推荐指数
5
解决办法
19万
查看次数

测试对象是否是C#中的泛型类型

如果对象是泛型类型,我想执行测试.我试过以下但没有成功:

public bool Test()
{
    List<int> list = new List<int>();
    return list.GetType() == typeof(List<>);
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么,我该如何进行这项测试?

.net c# generics reflection types

128
推荐指数
4
解决办法
6万
查看次数

使用CMake预编译的头文件

我在网上看到了一些关于在CMake中对预编译头文件进行黑客攻击的一些(旧)帖子.它们看起来都有点遍布整个地方,每个人都有自己的方式.目前最好的方法是什么?

c++ gcc cmake precompiled-headers visual-studio

99
推荐指数
8
解决办法
6万
查看次数

Eclipse CDT中最有用的快捷方式

我想制作一个备忘单,展示Eclipse CDT(C++)最有用(和节省时间)的快捷方式.

您能分享一下您在CDT中使用的最有用的快捷方式吗?

请仅发布一般快捷方式(在执行C++时可用)或特定于CDT.

c++ eclipse keyboard-shortcuts eclipse-cdt

78
推荐指数
10
解决办法
6万
查看次数

使用标记接口而不是属性的令人信服的理由

它已经讨论过堆栈溢出,我们应该更喜欢属性标记接口(接口没有任何成员).MSDN上的接口设计文章也断言了这个建议:

避免使用标记接口(没有成员的接口).

自定义属性提供了标记类型的方法.有关自定义属性的更多信息,请参阅编写自定义属性.如果可以在执行代码之前推迟检查属性,则首选自定义属性.如果您的方案需要编译时检查,则无法遵守此准则.

甚至还有一个FxCop规则来强制执行此建议:

避免空接口

接口定义提供行为或使用合同的成员.无论类型在继承层次结构中出现何种位置,接口描述的功能都可以采用任何类型.类型通过为接口的成员提供实现来实现接口.空接口不定义任何成员,因此,不定义可以实现的合同.

如果您的设计包含期望实现类型的空接口,则可能使用接口作为标记,或者标识一组类型的方法.如果此标识将在运行时发生,则完成此操作的正确方法是使用自定义属性.使用属性的存在或不存在或属性的属性来标识目标类型.如果标识必须在编译时进行,则可以使用空接口.

本文仅说明了您可能忽略警告的一个原因:何时需要对类型进行编译时识别.(这与界面设计文章一致).

如果在编译时使用接口标识一组类型,则可以安全地从此规则中排除警告.

实际问题是:Microsoft在框架类库的设计中(至少在几种情况下)不符合他们自己的建议:IRequiresSessionState接口IReadOnlySessionState接口.ASP.NET框架使用这些接口来检查它是否应该为特定处理程序启用会话状态.显然,它不用于类型的编译时识别.他们为什么不这样做?我可以想到两个潜在的原因:

  1. 微优化:检查对象是否实现接口(obj is IReadOnlySessionState)比使用反射检查属性(type.IsDefined(typeof(SessionStateAttribute), true))更快.大多数时候差异可以忽略不计,但它实际上可能对ASP.NET运行时中的性能关键代码路径很重要.但是,他们可以使用的解决方法就像为每个处理程序类型缓存结果一样.有趣的是,ASMX Web服务(具有类似性能特征)实际上使用EnableSession属性WebMethod属性来实现此目的.

  2. 与使用第三方.NET语言的属性装饰类型相比,可能更有可能支持实现接口.由于ASP.NET被设计为与语言无关,并且ASP.NET 根据指令的属性为类型(可能在CodeDom的帮助下以第三方语言生成)生成代码,因此可能会生成更多感觉使用接口而不是属性.EnableSessionState<%@ Page %>

使用标记接口而不是属性的有说服力的原因是什么?

这只是一个(过早?)优化还是框架设计中的一个小错误?(他们认为反射是"红眼睛的大怪物"吗?)思想?

.net asp.net attributes interface marker-interfaces

55
推荐指数
4
解决办法
5427
查看次数

Lint for C#

C#有一个类似于lint的工具吗?我有编译器标记警告 - 作为错误,我有Stylecop,但这些只能捕获最令人震惊的错误.有没有其他必备工具(特别是像我这样的新手C#ers)指出我正在做的可能是愚蠢的事情?

.net c# code-analysis lint

54
推荐指数
4
解决办法
5万
查看次数

这是什么意思 ?公共名称{get; 组;}

我经常在C#文档中看到这种情况.但是它做了什么?

public class Car
{
   public Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

c# properties

47
推荐指数
3
解决办法
9万
查看次数

LINQ to SQL - 如何选择特定列并返回强类型列表

我正在尝试使用LINQ to SQL从表中选择一些特定的列,并将结果作为强类型的对象列表返回.

例如:

var result = (from a in DataContext.Persons
                              where a.Age > 18
                              select new Person
                              {
                                  Name = a.Name,
                                  Age = a.Age
                              }
                              ).ToList();
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

它构建良好,但是当我运行它时,我得到了错误.MyEntity不允许在查询中显式构造实体类型.

asp.net linq-to-sql

41
推荐指数
1
解决办法
15万
查看次数