错误:预定义类型'System.Range'未被定义或导入。

4

早先我遇到了以下错误:

特性 'range operator' 在 C# 7.3 中不可用。 请使用语言版本 8.0 或更高版本。

当我升级项目后仍然存在以下错误:

预定义类型 'System.Range' 未定义或未导入

基本上是想测试如何检索数组或字符串的片段:

using System;
using System.Windows.Forms;

namespace TestRange
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var story = "Testing C# 8";
            Console.WriteLine(story[^6..^0]); // (last 6 chars)
        }
    }
}

我参考的文章,但并没有帮助:

https://learn.microsoft.com/zh-cn/dotnet/api/system.range?view=netcore-3.1 https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/proposals/csharp-8.0/ranges https://learn.microsoft.com/zh-cn/dotnet/csharp/tutorials/ranges-indexes

https://www.infoworld.com/article/3532284/how-to-use-indices-and-ranges-in-csharp-80.html

https://www.codejourney.net/2019/02/csharp-8-slicing-indexes-ranges/

一个相关的问题:C#中的数组片段


screenshot1 - undefined
C# 8 只支持 .Net Core 3 及以上版本。 - undefined
你要么需要将你的项目迁移到 .Net Core 3.1,要么不使用 System.Range - undefined
@Hayden,那不是真的...你可以在项目级别上指定语言规范。在一个.NetFramework项目(旧版或新版SDK)中,你可以添加<LangVersion>8.0<\LangVersion>。你将面临的问题不是将项目语言指定为8.0(而不是默认使用与项目和IDE关联的目标文件),而是某些程序集由特定的TFM导入。 - undefined
1
即使您在项目文件中添加了LangVersion,针对.Net Framework的项目也不会导入System.Range和System.Index。然而,处理这个问题是一个“实现”规范的问题;因此,解决这个问题(并减轻导入的问题)的方法之一是下载/包含IndexRange(第三方)NuGet包,适用于netstandard2.0和.NetFramework c#8。 - undefined
显示剩余3条评论
1个回答

0
作为.NET Framework 461或类似版本的解决方案,您可以在您的csproj中使用这个NuGet包。
<ItemGroup>
  <PackageReference Include="Contrib.Bcl.Ranges" Version="1.0.0"/>
</ItemGroup>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接