Questions tagged «c#»

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

4
功能“使用声明”在C#7.3中不可用。请使用语言版本8.0或更高版本-一台计算机上出现错误,但在另一台计算机上有效
Visual Studio Enterprise 16.3.7在两台单独的计算机上使用时,一个构建良好,另一台计算机抛出错误: 功能“使用声明”在C#7.3中不可用。请使用语言版本8.0或更高版本。 通过LangVersion在.csproj此处建议的设置https://stackoverflow.com/a/48085575/3850405可以轻松在无工作计算机上解决此问题,或者让Visual Studio像上面的打印屏幕一样自动修复它。 <LangVersion>8.0</LangVersion> 我不明白的是,为什么一台机器在没有这条线的情况下就可以正常运行,.csproj而另一台机器需要它呢?
24 c#  .net-4.6 

1
为什么Count()方法使用“ checked”关键字?
在查看Count和Count()之间的区别时,我想看一看的源代码Count()。我看到了以下代码片段,我想知道为什么checked关键字是必需/必需的: int num = 0; using (IEnumerator<TSource> enumerator = source.GetEnumerator()) { while (enumerator.MoveNext()) { num = checked(num + 1); } return num; } 源代码: // System.Linq.Enumerable using System.Collections; using System.Collections.Generic; public static int Count<TSource>(this IEnumerable<TSource> source) { if (source == null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source); } ICollection<TSource> collection = source as ICollection<TSource>; …
23 c#  checked 

1
Directory.GetFiles不会拾取所有文件
我有一些代码旨在获取目录中的文件,这很简单 foreach (var Totalfile in new DirectoryInfo(rootfolder).GetFiles("*Totals*.csv", SearchOption.TopDirectoryOnly)) 这些文件的名称如下: Totals.CSV142344 Totals.CSV142409 Totals.CSV142433 Totals.CSV142501 Totals.CSV142528 我的问题是它没有拾取最后一个文件。 我通过将其替换为固定的代码: foreach (var Totalfile in new DirectoryInfo(rootfolder).GetFiles("*Totals*.csv*", SearchOption.TopDirectoryOnly)) 说获取包含Totals和.csv的任何文件,以及.csv之后的任何文件。 我不明白的是为什么它得到了前四个文件,却没有得到最后四个文件。 我以为原始文件不会拾取任何文件?
23 c#  filenames 

1
为什么要声明一个与父作用域中的变量同名的子变量?
我最近写了一些代码,在其中我无意中将变量名重用为函数中声明的操作的参数,该函数已经具有相同名称的变量。例如: var x = 1; Action<int> myAction = (x) => { Console.WriteLine(x); }; 当我发现重复项时,我很惊讶地看到代码可以完美地编译和运行,这并不是基于我对C#范围的了解而期望的行为。一些快速的Google搜索出现SO问题,它们抱怨类似的代码确实会产生错误,例如Lambda Scope Clarification。(我将示例代码粘贴到IDE中,以确保它可以运行;只是为了确保它可以正常运行。)此外,当我在Visual Studio中进入“重命名”对话框时,第一个x突出显示为名称冲突。 为什么此代码有效?我在Visual Studio 2019中使用C#8。

4
检测到不支持的.Net Core 3.0可能的对象周期
我有2个实体与一对多相关 public class Restaurant { public int RestaurantId {get;set;} public string Name {get;set;} public List<Reservation> Reservations {get;set;} ... } public class Reservation{ public int ReservationId {get;set;} public int RestaurantId {get;set;} public Restaurant Restaurant {get;set;} } 如果我尝试使用我的API预订餐厅 var restaurants = await _dbContext.Restaurants .AsNoTracking() .AsQueryable() .Include(m => m.Reservations).ToListAsync(); ..... 我收到错误消息,因为对象包含彼此的引用。有相关的文章建议创建单独的模型 或添加NewtonsoftJson配置 问题是我不想创建单独的模型,第二个建议没有帮助。有没有没有循环关系的加载数据的方法吗?* …

5
如何在C#中捕获通用异常的所有变体
我想捕获一个通用异常类的所有变体,我想知道是否有一种方法可以在没有多个catch块的情况下进行。例如说我有一个异常类: public class MyException<T> : Exception { public string MyProperty { get; } public MyException(T prop) : base(prop.ToString()) { MyProperty = prop?.ToString(); } } 和两个派生类: public class MyDerivedStringException : MyException<string> { public MyDerivedStringException(string prop) : base(prop) { } } public class MyDerivedIntException : MyException<int> { public MyDerivedIntException(int prop) : base(prop) …
22 c#  generics  exception 

1
如何在.Net Core 3 Worker服务中设置应用程序设置
我一直在寻找有关阅读.Net Core 3中的appsettings.json 的许多教程和SO问题(例如App Settings .Net Core),在处理Worker服务时,我找不到任何有关操作方法的指针。没有启动方法。相反,我有一个带有main方法的Program.cs: public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); } 如何从.Net Core 3的Worker服务项目中的appsettings.json文件读取? 我添加了对使用.Net v4.8和另一个项目创建的自定义WCF客户端的引用,该项目仅在整个解决方案之间共享所有Busines域对象。我的解决方案主要是.Net v4.8,我想使用Worker Service。客户端项目通过代码在内部创建WCF客户端,因此所有绑定和端点都是可配置的。如果这是一个.Net v4.8项目,则将以下内容添加到app.config中: <appSettings> ... <add key="AminServiceUri" value="http://localhost:45108/ServiceHost/v1/AminService.svc" /> <add key="BillServiceUri" value="http://localhost:45108/ServiceHost/v1/BillService.svc" …

5
具有无限参数的C#方法或具有数组或列表的方法?
我最近了解到,您可以创建一些带有无限参数的方法,例如: SomeMethod(params int[] numbers); 但是我的问题是,这和创建接收列表或数组的方法有什么区别? SomeMethod(int[] numbers); SomeMethod(List<int> numbers); 也许对性能有影响?我还不完全了解,也看不出您希望以哪种方式使用无限制参数的方法。 在Google上进行快速搜索没有帮助,希望您能对我有所帮助。
21 c#  methods 


3
对DTO使用可空引用类型的最佳实践
我有一个DTO,它是通过从DynamoDB表中读取来填充的。说当前看起来像这样: public class Item { public string Id { get; set; } // PK so technically cannot be null public string Name { get; set; } // validation to prevent nulls but this doesn't stop database hacks public string Description { get; set; } // can be null } 有什么最佳实践可以解决这个问题?我宁愿避免使用非参数构造函数,因为它与Dynamo …

4
在AsyncDispose中处理异常的正确方法
在切换到新的.NET Core 3的过程中IAsynsDisposable,我偶然发现了以下问题。 问题的核心:如果DisposeAsync引发异常,则此异常隐藏await using-block 内部引发的所有异常。 class Program { static async Task Main() { try { await using (var d = new D()) { throw new ArgumentException("I'm inside using"); } } catch (Exception e) { Console.WriteLine(e.Message); // prints I'm inside dispose } } } class D : IAsyncDisposable { public …

3
“ ILoggerFactory”不包含“ AddConsole”的定义
private ILoggerFactory ConfigureLogging(ILoggerFactory factory) { factory.AddConsole(); return factory; } 我已经在Github上找到了上面的代码。它给出以下错误: 'ILoggerFactory' does not contain a definition for 'AddConsole' and the best extension method overload 'ConsoleLoggerExtensions.AddConsole(ILoggingBuilder)' requires a receiver of type 'ILoggingBuilder' 我正在使用NET Core 3.0,并且安装了以下NuGet软件包。 <PackageReference Include="Discord.Net" Version="2.1.1" /> <PackageReference Include="Discord.Net.Commands" Version="2.1.1" /> <PackageReference Include="Discord.Net.WebSocket" Version="2.1.1" /> <PackageReference Include="Microsoft.Extensions.Configuration" Version="3.0.0" /> …
20 c#  nuget  core  discord.net 

2
如何在.NET Core 3.0中替换AddJwtBearer扩展
我有以下代码可以在.NET Core 2.2中进行编译和工作: byte[] key = Encoding.ASCII.GetBytes(Constants.JWT_SECRET); services.AddAuthentication(x => { x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(x => { x.RequireHttpsMetadata = false; x.SaveToken = true; x.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = false, ValidateAudience = false }; }); 在.NET Core 3.0中,出现错误: 错误CS1061'AuthenticationBuilder'不包含'AddJwtBearer'的定义,并且找不到可以接受的扩展方法'AddJwtBearer'接受类型为'AuthenticationBuilder'的第一个参数(您是否缺少using指令或程序集引用?) …

5
ASP.NET Core 3.0 System.Text.Json Camel案例序列化
在ASP.NET Core 3.0 Web API项目中,如何指定System.Text.Json序列化选项以自动将Pascal Case属性序列化/反序列化为Camel Case,反之亦然? 给定具有Pascal Case属性的模型,例如: public class Person { public string Firstname { get; set; } public string Lastname { get; set; } } 以及使用System.Text.Json将JSON字符串反序列化为Person类类型的代码: var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}"; var person = JsonSerializer.Deserialize<Person>(json); 除非将JsonPropertyName与以下每个属性一起使用,否则不会成功反序列化: public class Person { [JsonPropertyName("firstname") public string Firstname { get; set; } …

2
为什么C#编译器在嵌套作用域中允许重复的变量?
历史上,在.Net中进行开发时,我无法在嵌套作用域中重复变量的名称。但是,最近将Visual Studio 2019更新到版本16.4.2之后,我注意到可以在嵌套作用域中复制变量名称。 例如: var test = "hello"; Console.WriteLine(test); var things = new []{"one", "two", "three"}; things.Select(test => // <- test is duplicated here, normally this breaks compilation { Console.WriteLine(test); return test; }).ToList(); // output: // hello // one // two // three https://dotnetfiddle.net/h85BK4 为什么突然允许这样做? 后续问题:如果这是一种新的语言“功能”,是否有一种方法可以配置Visual Studio在嵌套范围中重复变量时继续中断?

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.