我在一个操作指定类型的方法中有一些逻辑,我想创建一个封装逻辑的通用lambda.这就是我想要做的精神:
public void DoSomething()
{
// ...
Func<T> GetTypeName = () => T.GetType().Name;
GetTypeName<string>();
GetTypeName<DateTime>();
GetTypeName<int>();
// ...
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以将类型作为参数传递或创建泛型方法.但我很想知道lambda是否可以定义自己的泛型参数.(所以我不是在寻找替代方案.)据我所知,C#3.0不支持这一点.
好吧,这是一个迂腐的问题,但我想确保我正确理解这个定义.使用封闭的绰号来形容匿名函数可以解除在局部范围内的变量(无论他们实际上做还是不做)或者只有当他们做解除局部范围内的变量?
换句话说,如果一个匿名函数能够在其局部范围内提升变量(因为语言提供了这种能力)但是没有,它仍然被认为是一个闭包吗?
我的理解是,只有当局部变量被解除时,它才是闭包.但是一个没有的匿名函数(尽管它可以)不是一个闭包.因此,并非所有匿名函数都是闭包,但所有闭包都是匿名函数.
再次,抱怨迂腐,但这些东西啃着我.:)
在埃文斯DDD书中,他谈到用"模块"将域中的概念隔离开来.术语"模块"可以转化为软件开发中的许多不同的东西,无论是概念的还是具体的,所以我想知道如何在C#.NET系统中表达这个DDD模块的概念,如果有任何直接的相关性,在软件开发中使用术语"模块"的其他用法(例如,Evans提到某些开发人员将DDD模块表示为Java包,我认为这类似于.NET程序集).
我认为你可以用单独的.NET程序集或者命名空间来表达这个概念(这就是现在正在做的事情).我们正计划减少解决方案中的项目数量,以缩短构建时间,因此我真的对如何在单个程序集中应用此概念感兴趣.
谢谢!
米
我正在使用SystemJS/jspm和TypeScript定义管理器在TypeScript中构建Aurelia应用程序.我.ts有源文件/app/**和.d.ts文件下/typings/**和/jspm_packages/**(因为一些定义文件通过jspm发货).
显然,TypeScript编译器不了解SystemJS/jspm或TSD,因此我需要以某种方式引用它们管理的类型定义.我已经尝试将所有.ts文件传递给编译器,因此它引用了源代码和定义,但这导致了必须下载所有类型定义导入的所有类型定义的漏洞.它最终是类型定义开始(哟dawg我听说你喜欢类型定义).似乎编译器应该只关心由源直接引用的类型定义导出的东西(而不是那些定义导入的东西).
无论如何,我感觉我的方式是错误的,我想知道是否有更好/正确的方式来引用定义文件.
PS:看起来可能有一些涉及编辑器/插件的解决方案,但我正在寻找一种严格的CLI方法,因为这是自动构建的一部分.
所以我想要注册特定查找类型的n个映射.IE:
x.For<IWidget>().Add<SquareWidget>();
x.For<IWidget>().Add<YellowWidget>();
Run Code Online (Sandbox Code Playgroud)
我想让SM将一个枚举(或数组)注入到类的构造函数中:
public class Machine
{
public Machine(IEnumerable<IWidget> widgets) { ... }
}
ObjectFactory.GetInstance<Factory>()
Run Code Online (Sandbox Code Playgroud)
我没有办法做到这一点,但我可能会遗漏一些东西.
TIA,
米
PS:请不要回答"你为什么这样做"或其他不相关的评论.我意识到这可以通过其他方法来实现.如果这种特殊方法可行,我真的很好奇.:)