在C#3.0中,我们使用;var";它在C#2.0中的替代方案是什么?

在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

我正在学习.Net中使用托管可扩展性框架(MEF)的可插入式体系结构 我在网上看到了示例代码,但当我试图实现它时,我遇到了一个问题

代码使用了:

 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());

HTH

MEF使用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());