小编jah*_*hav的帖子

无法将HashSet转换为IReadOnlyCollection

我有一个HashSet,我试图将其转换为IReadOnlyCollection,但我收到错误:

无法将类型'System.Collections.Generic.HashSet'隐式转换为'System.Collections.Generic.IReadOnlyCollection'.存在显式转换(您是否错过了演员?)

Hashset是一个

public class HashSet<T> : ICollection<T>, ISerializable, IDeserializationCallback, ISet<T>, IReadOnlyCollection<T>
Run Code Online (Sandbox Code Playgroud)

我可以使用显式转换,但我不知道为什么我不能将它用作IReadOnlyCollection.

HashSet<DateTime> set = new HashSet<DateTime> { DateTime.Today };
ICollection<DateTime> collection = set; // OK
ISerializable serializable = set;       // OK
IDeserializationCallback deserializationCallback = set; // OK
ISet<DateTime> iSet = set;                              // OK
IReadOnlyCollection<DateTime> castReadOnlyCollection = (IReadOnlyCollection<DateTime>)set; // OK
IReadOnlyCollection<DateTime> readOnlyCollection = set; // Error
Run Code Online (Sandbox Code Playgroud)

如果没有明确的演员,我为什么不能使用它呢?

我正在使用.NET framework 4.5

.net c#

17
推荐指数
2
解决办法
2717
查看次数

如何在 Visual Studio 2019 中使用 C#10

如何在 Visual Studio 2019 中使用 C# 10?我有最新更新(16.11.6),当我尝试创建一个新项目(需要 NET Standard 2.0,以与 4.7.2 兼容)并将其更改为 C#10

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <LangVersion>10.0</LangVersion>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

IDE 将显示 C#10 功能警告(这是针对全局使用的):

“CS8652:‘全局 using 指令’功能当前处于预览状态,不受支持。要使用预览功能,请使用‘预览’语言版本。”

当我将 LangVersion 更改为预览时,它至少可以编译,但我的团队混合了 VS2022 和 VS 2019(稍后升级),所以我正在寻找一种使用正确的 langversion 版本的方法(我使用起来不太舒服)预览)适用于所有这些。

visual-studio visual-studio-2019 c#-10.0

16
推荐指数
1
解决办法
1万
查看次数

在等待期间控制多个任务的流程

当我有两个任务并等待一个任务时,我无法理解控制流程.异步程序(C#和Visual Basic)中控制流只使用一个等待,所以它没有帮助.

我有以下代码:

public async Task Loop(string name, int count)
{
    for (int i = 0; i < count; i++)
    {
        Console.WriteLine("{0}: {1} Before", name, i);
        await Task.Delay(10);
        Console.WriteLine("{0}: {1} After", name, i);
    }
    Console.WriteLine("{0} COMPLETE", name);
}

[TestMethod]
public async Task TwoLoopsWithSeparateAwait()
{
    var loopOne = Loop("ONE", 3);
    Console.WriteLine("After ONE Creation");
    var loopTwo = Loop("TWO", 3);
    Console.WriteLine("After TWO Creation, before ONE await");
    await loopOne;
    Console.WriteLine("After ONE await");
    await loopTwo;
    Console.WriteLine("After TWO await");
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

  • ONE:0之前 …

.net c# asynchronous async-await

3
推荐指数
1
解决办法
936
查看次数