Questions tagged «c#»

C#(发音为“ See Sharp”)是由Microsoft开发的一种高级,静态类型的多范例编程语言。C#代码通常针对Microsoft的.NET系列工具和运行时,其中包括.NET Framework,.NET Core和Xamarin。使用此标记可解决有关用C#或C#正式规范编写的代码的问题。

1
转换IAsyncEnumerable到列表
因此,在C#8中,我们增加了IAsyncEnumerable接口。 如果我们有一个法线,IEnumerable我们可以制作一个List或几乎任何我们想要的其他收藏。感谢那里的Linq。 var range = Enumerable.Range(0, 100); var list = range.ToList(); 好吧,现在我想异步地将其转换IAsyncEnumerable为a List和this。该情况下已经有Linq实现了吗?如果没有,那我该如何转换呢?


2
JavaScript转换C#数值精度损失
当使用带MessagePack的SignalR在JavaScript和C#之间对值进行序列化和反序列化时,在接收端C#中会看到一些精度损失。 作为示例,我将值0.005从JavaScript发送到C#。当反序列化的值出现在C#端时,我得到的0.004999999888241291是接近的值,但不是精确的0.005。JavaScript端的值是Number,我正在使用的C#端的值double。 我已经读过JavaScript不能完全表示浮点数,这会导致类似的结果0.1 + 0.2 == 0.30000000000000004。我怀疑我看到的问题与JavaScript的此功能有关。 有趣的是,我没有看到相同的问题。从C#向JavaScript发送0.005会在JavaScript中产生0.005的值。 编辑:从C#的值只是在JS调试器窗口中缩短。正如@Pete所提到的,它确实扩展为不完全为0.5的值(0.005000000000000000104083408558)。这意味着差异至少发生在双方。 JSON序列化没有相同的问题,因为我假设它通过字符串传递,从而使接收环境留在控件中,从而将值解析为其原始数值类型。 我想知道是否有一种使用二进制序列化的方法来在两端都具有匹配的值。 如果不是,这是否意味着无法在JavaScript和C#之间进行100%准确的二进制转换? 使用的技术: 的JavaScript 带有SignalR和msgpack5的.Net Core 我的代码基于这篇文章。唯一的区别是我正在使用ContractlessStandardResolver.Instance。

2
如何在实体框架核心模型中使用C#8.0可空引用类型?
我在.NET Core 3.0项目上启用C#8.0可空引用类型。该项目使用Entity Framework Core 3.0访问数据库。 以下是标题不应为null的数据模型。 public class Vehicle { public int Id { get; private set; } public string Title { get; private set; } // Entity Framework Core is instructed to bind to the private _drivers field in a configuration builder private readonly List<Driver> _drivers = new …

3
当必须同时具有异步和同步版本的代码时,如何避免违反DRY原理?
我正在一个需要同时支持异步和同步版本的同一逻辑/方法的项目。因此,例如,我需要: public class Foo { public bool IsIt() { using (var conn = new SqlConnection(DB.ConnString)) { return conn.Query<bool>("SELECT IsIt FROM SomeTable"); } } public async Task<bool> IsItAsync() { using (var conn = new SqlConnection(DB.ConnString)) { return await conn.QueryAsync<bool>("SELECT IsIt FROM SomeTable"); } } } 这些方法的异步和同步逻辑在各个方面都相同,除了一个是异步的,而另一个不是。在这种情况下,是否有合法的方法避免违反DRY原则?我看到有人说您可以在异步方法上使用GetAwaiter()。GetResult()并从您的sync方法中调用它?在所有情况下该线程都安全吗?还有其他更好的方法可以做到这一点,还是我不得不重复逻辑?
15 c#  .net  asynchronous 


2
打开MySqlConnection时不会抛出异常吗?
我只是从异步和Task入手,我的代码已停止处理。当我有传入的网络数据包并且尝试与数据包处理程序中的数据库进行通信时,就会发生这种情况。 public class ClientConnectedPacket : IClientPacket { private readonly EntityFactory _entityFactory; public ClientConnectedPacket(EntityFactory entityFactory) { _entityFactory= entityFactory; } public async Task Handle(NetworkClient client, ClientPacketReader reader) { client.Entity = await _entityFactory.CreateInstanceAsync( reader.GetValueByKey("unique_device_id")); // this Console.WriteLine never gets reached Console.WriteLine($"Client [{reader.GetValueByKey("unique_device_id")}] has connected"); } } 从异步任务中调用Handle方法 if (_packetRepository.TryGetPacketByName(packetName, out var packet)) { …
14 c#  mysql 

3
为什么要继续执行Task.WhenAll的延续?
Task.WhenAll在.NET Core 3.0上运行时,我只是对该方法感到好奇。我将一个简单Task.Delay任务作为单个参数传递给Task.WhenAll,并且希望包装后的任务的行为与原始任务相同。但这种情况并非如此。原始任务的延续是异步执行的(这是理想的),多个Task.WhenAll(task)包装的延续是一个接一个地同步执行的(这是不希望的)。 这是此行为的演示。四个辅助任务正在等待同一Task.Delay任务完成,然后继续进行大量的计算(由模拟Thread.Sleep)。 var task = Task.Delay(500); var workers = Enumerable.Range(1, 4).Select(async x => { Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}" + $" [{Thread.CurrentThread.ManagedThreadId}] Worker{x} before await"); await task; //await Task.WhenAll(task); Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}" + $" [{Thread.CurrentThread.ManagedThreadId}] Worker{x} after await"); Thread.Sleep(1000); // Simulate some heavy CPU-bound computation }).ToArray(); Task.WaitAll(workers); 这是输出。四个延续在不同线程(并行)中按预期运行。 05:23:25.511 [1] Worker1 before await 05:23:25.542 …

2
我可以告诉C#可为空的引用方法实际上是对字段的空检查吗
考虑以下代码: #nullable enable class Foo { public string? Name { get; set; } public bool HasName => Name != null; public void NameToUpperCase() { if (HasName) { Name = Name.ToUpper(); } } } 在Name = Name.ToUpper()上,我收到一条警告,指出Name是可能的空引用,这显然是错误的。我可以通过内联HasName来解决此警告,因此条件是if(Name!= null)。 有什么方法可以指示编译器,HasName的真实响应暗含对Name的不可为空性的约束? 这很重要,因为HasName实际上可能会测试更多的东西,并且我可能想在多个地方使用它,或者它可能是API表面的公共部分。有很多原因希望将空检查纳入其自己的方法中,但是这样做似乎破坏了可空引用检查器。

2
如何在Razor视图中使用新的c#8.0功能
我已经更新了ASP.NET Mvc 5 Web应用程序,以通过Visual Studio 2019使用新的c#8.0功能,并且一切正常,直到我尝试在Razor视图中使用这些新功能为止。 例如,如果我尝试使用新的switch表达式: @{ ViewBag.Title = "About"; var foo = 1; var bar = foo switch { 1 => "one", 2 => "two", _ => string.Empty }; } <h2>@ViewBag.Title.</h2> <h3>@ViewBag.Message</h3> <p>Use this area to provide additional information.</p> 直到我尝试访问该页面时,编译器才会抱怨,这给了我编译错误。 我怀疑Microsoft.CodeDom.Providers.DotNetCompilerPlatform必须更新,但似乎没有可用的更新。 有什么方法可以在Razor视图中使用c#8.0语言功能?
14 c#  asp.net-mvc  razor 

6
403消息:Legacy People API未在项目中使用
Google API已启用,但给出了错误;旧版People API之前尚未在项目中使用过,或者已被禁用。通过访问https://console.developers.google.com/apis/api/legacypeople.googleapis.com/overview?project=启用它,然后重试。如果您最近启用了此API,请等待几分钟,以便该操作传播到我们的系统并重试。
14 c#  asp.net  google-api 

3
'无法从程序集'Microsoft.AspNetCore.Mvc.Formatters.Json,版本= 3.0.0.0加载类型'Microsoft.AspNetCore.Mvc.MvcJsonOptions'
我netstandard2.1在netcoreapp3.0Web应用程序中使用库。在中添加服务时Startup,出现以下错误: '无法从程序集'Microsoft.AspNetCore.Mvc.Formatters.Json,版本= 3.0.0.0加载类型'Microsoft.AspNetCore.Mvc.MvcJsonOptions' 我还在Microsoft.AspNetCore.Mvc类库中使用了2.2.0包中的某些功能。 这是我的图书馆.csproj, <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" /> </ItemGroup> </Project> 这是ServiceExtensions我图书馆的课, public static class ServiceExtensions { public static IMvcBuilder AddMyLibrary(this IMvcBuilder builder) { builder.Services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>(); builder.AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver(); }); builder.Services.ConfigureOptions<ConfigureLibraryOptions>(); return builder; } } 这是我的ConfigureLibraryOptions课, public class ConfigureLibraryOptions : …

3
在一定条件下,建立两个数据表中的一个
首先,我需要从ODBC中获取所有数据(这已经可以工作了)。 接下来是最复杂的部分,我不确定该如何完成。ODBC中有两个数据表。我将它们与当前代码合并,并使用某些参数对其进行过滤。 表1中的数据库: NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE 123 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1 133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1 153 MB E200 C25 JN KI OP PY OR JD 5 …
13 c#  datatable 

4
等待退出时进程有时会挂起
等待退出时进程挂起的原因可能是什么? 此代码必须启动powershell脚本,该脚本在内部执行许多操作,例如通过MSBuild开始重新编译代码,但是可能的问题是,即使正确执行了Power Shell脚本,它也会生成过多的输出,并且该代码在等待退出时会卡住 这有点“怪异”,因为有时此代码可以正常工作,有时甚至会卡住。 代码挂在: process.WaitForExit(ProcessTimeOutMiliseconds); Powershell脚本的执行时间约为1-2秒,而超时时间为19秒。 public static (bool Success, string Logs) ExecuteScript(string path, int ProcessTimeOutMiliseconds, params string[] args) { StringBuilder output = new StringBuilder(); StringBuilder error = new StringBuilder(); using (var outputWaitHandle = new AutoResetEvent(false)) using (var errorWaitHandle = new AutoResetEvent(false)) { try { using (var process = …
13 c# 

2
我可以通过Office365共享邮箱发送SMTP电子邮件吗?
我们正在考虑迁移到O365;但是,我们开发了使用当前Exchange服务器将错误发生时既发送给外部用户又发送给支持箱的电子邮件的软件。 我已经对此进行了测试,以确保我们已有的代码将继续与O365配合使用,但到目前为止,我还没有取得很大的成功。 我尝试过使用.Net的SmtpClient以及MailKit的SmtpClient,但似乎都无法使用。我不断收到错误消息(这是MailKit发出的错误-.Net错误类似) “ AuthenticationInvalidCredentials:5.7.3身份验证失败[* .prod.exchangelabs.com]” 我可以使用代码中的凭据登录OWA,因此我知道这些凭据是有效的。无法通过O356发送电子邮件吗?为了使之成为可能,Exchange中是否必须进行任何特殊配置? 到目前为止,这是我尝试过的: MailKit var msg = new MimeMessage(); msg.From.Add(new MailboxAddress("Support","support@mydomain.com")); msg.To.Add(new MailboxAddress("Me","me@mydomain.com")); msg.To.Add(new MailboxAddress("External User","euser@externaldomain.com")); msg.Subject = "Test"; msg.Body = new TextPart("plain"){ Text = "Here is a message for you" }; using(var client = new SmtpClient()){ client.ServerCertificateValidationCallback = (s,c,h,e) => true; client.AuthenticationMechanisms.Remove("XOAUTH2"); //Not sure …
13 c#  .net  smtp  office365  mailkit 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.