在C#3.0中,我们使用;var";它在C#2.0中的替代方案是什么?
我正在学习.Net中使用托管可扩展性框架(MEF)的可插入式体系结构 我在网上看到了示例代码,但当我试图实现它时,我遇到了一个问题 代码使用了:在C#3.0中,我们使用;var";它在C#2.0中的替代方案是什么?,c#,c#-3.0,mef,var,C#,C# 3.0,Mef,Var,我正在学习.Net中使用托管可扩展性框架(MEF)的可插入式体系结构 我在网上看到了示例代码,但当我试图实现它时,我遇到了一个问题 代码使用了: var catalog = new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly()); var container = new CompositionContainer(catalog.CreateResolver()); 这个var可以在C#3.0上使用,正如我在C#2
var catalog = new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
var container = new CompositionContainer(catalog.CreateResolver());
这个var
可以在C#3.0上使用,正如我在C#2.0中编码一样
以上两种说法的备选方案是什么?如何使用VS2005使它们在c#2.0中工作
我现在试着这么说 错误1找不到类型或命名空间名称“AttributedAssemblyPartCatalog”(是否缺少using指令或程序集引用?C:\Documents and Settings\test\Desktop\MEFDemo\MEFDemo\Program.cs 31 13 MEFDemo
其中,我添加了对SystemComponentModel.Composition的引用,基本上,
var
强制编译器根据变量的“初始值设定项”确定(推断)变量的编译时类型——实际上是从=
符号右侧的表达式。这里的类型很明显:
AttributedAssemblyPartCatalog catalog = new
AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
CompositionContainer container = new
CompositionContainer(catalog.CreateResolver());
AttributedAssemblyPartCatalog catalog =
new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
CompositionContainer container =
new CompositionContainer(catalog.CreateResolver());
并确保使用System.ComponentModel.Composition添加代码>语句。另外,请注意,AttributedAssemblyPartCatalog
已重命名为AssemblyCatalog
var是一个C#3.0关键字,除了从初始化值推断强类型之外,它什么也不做
在没有var的情况下,您可以手动执行编译器在幕后执行的操作;您可以在声明中指定变量的类型
因此
AttributedAssemblyPartCatalog catalog = new
AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
CompositionContainer container = new
CompositionContainer(catalog.CreateResolver());
C#中的变量仍然是强类型的<代码>变量
是隐式键入-请参阅
在大多数情况下,这只是意味着你必须少打字,但也有一些情况是必要的——在我链接到的页面的第二个示例中:
必须使用var
,因为结果
是匿名类型的集合,
并且该类型的名称不是
可由编译器以外的程序访问
本身
这是C#3.0中类型推断的使用 使用关键字时
var
在c#3.0中,编译器推断类型。看
在c#2.0中,必须将变量的类型声明为与c#1.1相同的类型
e、 g
让您了解上面的代码示例
AttributedAssemblyPartCatalog catalog = new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
CompositionContainer container = new CompositionContainer(catalog.CreateResolver());
HTHMEF使用LINQ,因此需要.NET3.5。尝试在.NET 2.0上使用它不会有任何运气。我尝试了这个bt,现在说错误1找不到类型或命名空间名称“AttributedAssemblyPartCatalog”(是否缺少using指令或程序集引用?)C:\Documents and Settings\test\Desktop\MEFDemo\MEFDemo\Program.cs 31 13 MEFDemo,其中我添加了对SystemComponentModel的引用。FoComposition我不确定是否需要明显的屈尊俯就,如果OP“显然”不理解,是否有必要指出这一点?我删除了“明显的屈尊俯就”,这是一个完全而全面的问题。匿名类型和隐式类型变量是两个独立的特性。没有“var”的匿名类型并不特别有用,但问题中的示例根本不使用匿名类型。谢谢你指出Jon我把我的措辞搞错了。作为额外的帮助,你可以将鼠标悬停在“var”关键字上,找出推断的类型是什么。
AttributedAssemblyPartCatalog catalog = new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
CompositionContainer container = new CompositionContainer(catalog.CreateResolver());