我理解lambdas Func和Action代表们.但表达方式让我很难过.在什么情况下你会使用一个Expression<Func<T>>而不是一个普通的老年人Func<T>?
我正在为一位朋友审查一些代码,并说他在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) 假设我有这个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)
谢谢!
如果对象是泛型类型,我想执行测试.我试过以下但没有成功:
public bool Test()
{
List<int> list = new List<int>();
return list.GetType() == typeof(List<>);
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么,我该如何进行这项测试?
我在网上看到了一些关于在CMake中对预编译头文件进行黑客攻击的一些(旧)帖子.它们看起来都有点遍布整个地方,每个人都有自己的方式.目前最好的方法是什么?
我想制作一个备忘单,展示Eclipse CDT(C++)最有用(和节省时间)的快捷方式.
您能分享一下您在CDT中使用的最有用的快捷方式吗?
请仅发布一般快捷方式(在执行C++时可用)或特定于CDT.
它已经讨论过堆栈溢出,我们应该更喜欢属性标记接口(接口没有任何成员).MSDN上的接口设计文章也断言了这个建议:
避免使用标记接口(没有成员的接口).
自定义属性提供了标记类型的方法.有关自定义属性的更多信息,请参阅编写自定义属性.如果可以在执行代码之前推迟检查属性,则首选自定义属性.如果您的方案需要编译时检查,则无法遵守此准则.
甚至还有一个FxCop规则来强制执行此建议:
避免空接口
接口定义提供行为或使用合同的成员.无论类型在继承层次结构中出现何种位置,接口描述的功能都可以采用任何类型.类型通过为接口的成员提供实现来实现接口.空接口不定义任何成员,因此,不定义可以实现的合同.
如果您的设计包含期望实现类型的空接口,则可能使用接口作为标记,或者标识一组类型的方法.如果此标识将在运行时发生,则完成此操作的正确方法是使用自定义属性.使用属性的存在或不存在或属性的属性来标识目标类型.如果标识必须在编译时进行,则可以使用空接口.
本文仅说明了您可能忽略警告的一个原因:何时需要对类型进行编译时识别.(这与界面设计文章一致).
如果在编译时使用接口标识一组类型,则可以安全地从此规则中排除警告.
实际问题是:Microsoft在框架类库的设计中(至少在几种情况下)不符合他们自己的建议:IRequiresSessionState接口和IReadOnlySessionState接口.ASP.NET框架使用这些接口来检查它是否应该为特定处理程序启用会话状态.显然,它不用于类型的编译时识别.他们为什么不这样做?我可以想到两个潜在的原因:
微优化:检查对象是否实现接口(obj is IReadOnlySessionState)比使用反射检查属性(type.IsDefined(typeof(SessionStateAttribute), true))更快.大多数时候差异可以忽略不计,但它实际上可能对ASP.NET运行时中的性能关键代码路径很重要.但是,他们可以使用的解决方法就像为每个处理程序类型缓存结果一样.有趣的是,ASMX Web服务(具有类似性能特征)实际上使用EnableSession属性的WebMethod属性来实现此目的.
与使用第三方.NET语言的属性装饰类型相比,可能更有可能支持实现接口.由于ASP.NET被设计为与语言无关,并且ASP.NET 根据指令的属性为类型(可能在CodeDom的帮助下以第三方语言生成)生成代码,因此可能会生成更多感觉使用接口而不是属性.EnableSessionState<%@ Page %>
使用标记接口而不是属性的有说服力的原因是什么?
这只是一个(过早?)优化还是框架设计中的一个小错误?(他们认为反射是"红眼睛的大怪物"吗?)思想?
C#有一个类似于lint的工具吗?我有编译器标记警告 - 作为错误,我有Stylecop,但这些只能捕获最令人震惊的错误.有没有其他必备工具(特别是像我这样的新手C#ers)指出我正在做的可能是愚蠢的事情?
我经常在C#文档中看到这种情况.但是它做了什么?
public class Car
{
public Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用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不允许在查询中显式构造实体类型.
c# ×6
.net ×5
asp.net ×2
c++ ×2
linq-to-sql ×2
attributes ×1
cmake ×1
delegates ×1
eclipse ×1
eclipse-cdt ×1
gcc ×1
generics ×1
interface ×1
lambda ×1
linq ×1
lint ×1
properties ×1
reflection ×1
try-catch ×1
types ×1