我有一个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
如何在 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 版本的方法(我使用起来不太舒服)预览)适用于所有这些。
当我有两个任务并等待一个任务时,我无法理解控制流程.异步程序(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)
结果如下: