【问题标题】:C# - How to use new features from 2017 in 2012C# - 如何在 2012 年使用 2017 年的新功能
【发布时间】:2017-11-05 15:11:55
【问题描述】:

我同时拥有 Visual Studio 2017 和 2012。 我正在创建的项目仅适用于 VS2012(我真的不知道为什么,有一些额外的安装只能在 VS2012 上安装)。

这是我的代码的一部分。 例如:

enum Colors
{
 blue = 0,
 green = 1,
 red = 2,
} 

public Class LED
{
 private ComponentLED[] _arr;

 public LED() 
 {
   //Here I create the array and fill him with the objects.
 }

 private ComponentLED GetLEDObjectByColor(string color)
 {
   //This line don't work 
   //('System.Enum' does not contain a definition for 'Parse'
   int index = (int)( (Colors)Enum.Parse(typeof(Colors), color) );
   return _arr[index];
 }
}

据我了解:System.dll 没有定义某些函数。 我看到的唯一适用于 Enum 类的函数是: 枚举.Equals Enum.ReferenceEquals

所以我认为问题可能出在 system.dll 中。

也许您知道问题出在哪里或如何解决。非常感谢你。

这里有一些关于我当前 system.dll 的信息

路径:C:\Program Files (x86)\Microsoft .NET Micro Framework\v4.2\Assemblies\le\System.dll

运行时版本:v4.0.30319

版本:4.2.0.0

和应用信息: 目标框架:.Net Micro FrameWork 4.2(最-无法更改)

【问题讨论】:

  • C# 从一开始就有枚举,你的代码还有其他问题。
  • 我没说c#没有枚举。但是它们在 VS2012 中仅有的静态函数是:Enum.ReferenceEquals 和 Enum.Equals
  • “我知道 VS2012 太旧了,但出于某种原因,它是唯一适用于我的项目的版本。”那是你应该解决的问题,而不是永久地生活在一个古老的版本中。请注意,没有“.NET 4.2”之类的东西,因此不清楚您真正的目标是什么。正如 Taylor 所说,该代码无论如何都应该适用于任何版本的桌面 .NET。我建议您创建一个包含项目详细信息的新问题,以及尝试将其迁移到 VS2017 时会发生什么。 (如果你真的想保留当前的问题,至少提供一个minimal reproducible example 并说出你看到了什么错误)
  • 对,现在您已经告诉我们,正是 micro 框架产生了巨大的影响 - 这是一个非常小众的环境,值得明确从头开始。 VS2017 不仅可以开箱即用,我对此并不感到惊讶。
  • 在此处查看:channel9.msdn.com/Blogs/MVP-VisualStudio-Dev/… 以获取 .NET MF 移植版本的 2017 年升级指南。

标签: c# visual-studio-2012 enums .net-micro-framework


【解决方案1】:

.NET MicroFramework 是一个非常非常精简的 .NET 框架版本,可以在嵌入式系统上运行。为了适应这些系统的严格内存限制,.NET 基础库的许多功能已被剥离,只保留最重要的功能。 The correct .NET MicroFramework system library guidance for enums can be found here。你会发现它不包含任何 Parse 选项。

在您的 Color 枚举解析的情况下,您可能必须根据底层的 int 值实现自己的代码来执行此操作。这也将使其在这些有限的系统上更快。

.NET MicroFramework 的开发在过去几年中显着放缓,但最近一个新团队已经开始对其进行开发并将其移植到 Visual Studio 2017。一个不错的介绍可以be found on Channel9 和针对 2017 构建的代码可以被跟踪in this GitHub issue

【讨论】:

    【解决方案2】:

    谢谢。 所以最佳解决方案是......

    private ComponentLED GetLEDObjectByColor(string color)
    {
       if(Colors.blue.ToString() == color)
          return _arr[(int)Colors.blue];
      //And continue it until I passed all the enums... 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      • 2018-11-01
      相关资源
      最近更新 更多