【问题标题】:In C# 3.0 we use "var" what is its alternative in C# 2.0?在 C# 3.0 中,我们使用 "var" 在 C# 2.0 中它的替代方案是什么?
【发布时间】:2009-05-13 08:33:59
【问题描述】:

我正在使用 Managed Extensibility Framework (MEF) 在 .Net 中学习可插入架构。 我在网上看到了示例代码,但是当我尝试实现它时,我卡住了。

代码正在使用:

 var catalog = new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
 var container = new CompositionContainer(catalog.CreateResolver());

这个var 在 C# 3.0 上可用,而我在 C# 2.0 中编码。

以上两种说法的替代方案是什么?如何使用 VS 2005 让它们在 c# 2.0 中工作?


我现在尝试了这个bt它的说法

错误 1 ​​找不到类型或命名空间名称“AttributedAssemblyPartCatalog”(您是否缺少 using 指令或程序集引用?) C:\Documents and Settings\test\Desktop\MEFDemo\ MEFDemo\Program.cs 31 13 MEFDemo

我在哪里添加了对 SystemComponentModel.Composition 的引用

【问题讨论】:

    标签: c# c#-3.0 mef var


    【解决方案1】:

    基本上,var 强制编译器根据变量的“初始化程序”来确定(推断)变量的 compile-time 类型——实际上是来自= 右侧的表达式符号。这里的类型很明显:

    AttributedAssemblyPartCatalog catalog = 
        new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
    CompositionContainer container = 
        new CompositionContainer(catalog.CreateResolver());
    

    并确保添加 using System.ComponentModel.Composition; 声明。另外,请注意 AttributedAssemblyPartCatalog 已重命名为 AssemblyCatalog

    【讨论】:

    • 我现在尝试了这个 bt 它的说法 错误 1 ​​找不到类型或命名空间名称“AttributedAssemblyPartCatalog”(您是否缺少 using 指令或程序集引用?) C:\Documents and Settings\test \Desktop\MEFDemo\MEFDemo\Program.cs 31 13 MEFDemo 其中我添加了对 SystemComponentModel.Fomposition 的引用
    • 我不确定你明显的居高临下是否有必要,如果 OP“显然”不理解,有必要指出这一点吗?
    • 我删除了“明显的屈尊俯就”,这是一个对原本完整而全面的问题投反对票的磁铁。
    【解决方案2】:

    这是 C# 3.0 中类型推断的使用。

    使用关键字时

    var
    

    在 c# 3.0 中,编译器推断类型。见scott guthries explanation

    在 c# 2.0 中,您必须声明变量的类型与 c# 1.1 相同

    例如

    Type variableName = new Type();
    

    制作你上面的代码示例

    AttributedAssemblyPartCatalog catalog = new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
    
    CompositionContainer container = new CompositionContainer(catalog.CreateResolver());
    

    HTH

    【讨论】:

    • 匿名类型和隐式类型变量是不同的特性。没有“var”,匿名类型并不是特别有用,但问题中的示例根本不使用匿名类型。
    • 帖子已编辑。感谢您指出乔恩,我的措辞混淆了。
    • 作为附加帮助,您可以将鼠标悬停在“var”关键字上以找出推断的类型是什么。
    【解决方案3】:
    AttributedAssemblyPartCatalog catalog = new 
        AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
    
    CompositionContainer container = new 
        CompositionContainer(catalog.CreateResolver());
    

    【讨论】:

      【解决方案4】:

      C# 中的变量仍然是强类型的。 var 是隐式类型 - 请参阅 MSDN

      在大多数情况下,这只是意味着您必须少输入,但在某些情况下是必要的 - 在我链接到的页面上的第二个示例中:

      var 必须使用,因为结果 是匿名类型的集合, 并且该类型的名称不是 编译器除外 自己。

      【讨论】:

        【解决方案5】:

        var 是 C# 3.0 关键字,除了从初始化值推断强类型外,什么都不做。

        在没有 var 的情况下,您手动执行编译器在幕后执行的操作;您在声明中指定变量的类型。

        因此;

        AttributedAssemblyPartCatalog catalog = new 
            AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
        
        CompositionContainer container = new 
            CompositionContainer(catalog.CreateResolver());
        

        【讨论】:

          【解决方案6】:

          MEF 使用 LINQ,因此需要 .NET 3.5。尝试在 .NET 2.0 上使用它不会有任何运气。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-04-13
            • 1970-01-01
            • 2018-03-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多