คำถามติดแท็ก c#

C # (ออกเสียงว่า "ดูคม") เป็นภาษาการเขียนโปรแกรมหลายกระบวนทัศน์ในระดับสูงพิมพ์แบบคงที่พัฒนาโดย Microsoft รหัส C # มักกำหนดเป้าหมายกลุ่มเครื่องมือ. NET ของ Microsoft และรันไทม์ซึ่งรวมถึง. NET Framework, .NET Core และ Xamarin เป็นต้น ใช้แท็กนี้สำหรับคำถามเกี่ยวกับโค้ดที่เขียนในข้อกำหนดทางการของ C # หรือ C #

2
วิธีการฉีดหรือใช้ IConfiguration ใน Azure Function V3 พร้อมการฉีดอ้างอิงเมื่อกำหนดค่าบริการ
โดยปกติในโครงการ. NET Core ฉันจะสร้างคลาส 'boostrap' เพื่อกำหนดค่าบริการของฉันพร้อมกับคำสั่งการลงทะเบียน DI นี่เป็นวิธีส่วนขยายIServiceCollectionที่ฉันสามารถเรียกวิธีการที่ชอบ.AddCosmosDbServiceและทุกสิ่งที่จำเป็นคือ 'อยู่ในตัวเอง' ในคลาสแบบสแตติกที่มีวิธีการนั้น กุญแจสำคัญคือว่าวิธีการได้รับIConfigurationจากStartupชั้นเรียน ฉันเคยทำงานกับ DI ในฟังก์ชั่น Azure ในอดีต แต่ยังไม่ผ่านข้อกำหนดเฉพาะนี้ ฉันใช้IConfigurationเพื่อผูกกับคลาสที่เป็นรูปธรรมพร้อมการตั้งค่าการจับคู่คุณสมบัติจากทั้งของฉันlocal.settings.jsonและการตั้งค่าแอปพลิเคชัน dev / การผลิตเมื่อฟังก์ชั่นการใช้งานใน Azure CosmosDbClientSettings.cs /// <summary> /// Holds configuration settings from local.settings.json or application configuration /// </summary> public class CosmosDbClientSettings { public string CosmosDbDatabaseName { get; set; } public string CosmosDbCollectionName …

3
การแมปเอนทิตีเดียวกันกับตารางที่แตกต่างกัน
ความรู้เกี่ยวกับโดเมน ฉันกำลังเขียนซอฟต์แวร์ POS (จุดขาย) ที่อนุญาตให้ชำระค่าสินค้าหรือคืนเงินได้ เมื่อชำระเงินหรือคืนเงินหนึ่งต้องระบุการโอนเงินที่หมายถึงการใช้: เงินสด EFT (~ = บัตรเครดิต) บัตรสะสมคะแนนบัตรกำนัล ฯลฯ การโอนเงินหมายถึงชุดค่าที่แน่นอนและเป็นที่รู้จัก (ชนิดของ enum) ส่วนที่ยุ่งยากคือฉันต้องสามารถจัดเก็บชุดย่อยที่กำหนดเองของวิธีการเหล่านี้สำหรับการชำระเงินและการคืนเงิน (ทั้งสองชุดอาจแตกต่างกัน) ในเครื่อง POS ตัวอย่างเช่น: วิธีการชำระเงินที่พร้อมให้บริการ: เงินสด, EFT, การ์ดความภักดี, คูปอง การคืนเงินที่มีอยู่หมายถึง: เงินสดบัตรกำนัล สถานะปัจจุบันของการดำเนินงาน ฉันเลือกที่จะใช้แนวคิดการโอนเงินหมายถึง: public abstract class MoneyTransferMean : AggregateRoot { public static readonly MoneyTransferMean Cash = new CashMoneyTransferMean(); public static readonly MoneyTransferMean EFT …

4
เหตุใดจึงต้องมีการแทนที่คำหลักหน้าวิธีนามธรรมเมื่อเราใช้พวกเขาในชั้นเรียนเด็ก
เมื่อเราสร้างคลาสที่สืบทอดมาจากคลาสนามธรรมและเมื่อเราใช้คลาสนามธรรมที่สืบทอดมาทำไมเราต้องใช้คีย์เวิร์ด override? public abstract class Person { public Person() { } protected virtual void Greet() { // code } protected abstract void SayHello(); } public class Employee : Person { protected override void SayHello() // Why is override keyword necessary here? { throw new NotImplementedException(); } protected override void Greet() …
9 c# 

2
ค่าทศนิยมที่รับรู้เป็น DateTime แทนที่จะส่งคืนค่าเท็จจาก DateTime.Parse
ฉันต้องทำการตรวจสอบตามค่าสตริงไม่ว่าจะเป็นวันที่หรือทศนิยม แต่แยกวันที่กลับจริงสำหรับทศนิยม string val = "3.5"; DateTime oDate = DateTime.Parse(val); 3/5/2019ก็จะส่งกลับวันที่ถูกต้อง จะตรวจสอบความถูกต้องของสตริงเพื่อทราบวันที่ที่ถูกต้องเมื่อไม่ทราบรูปแบบวันที่?
9 c#  .net  datetime 

2
ฐานข้อมูลสตริงการเชื่อมต่อแบบไดนามิก c #
ฉันใช้รหัสบรรทัดนี้สำหรับการเชื่อมต่อเสมอ: string ConnectString = "datasource = mysource; username = myusername; password = mypassword; database = mydatabasename"; สิ่งที่ฉันพยายามทำในครั้งนี้คือแทนที่จะเขียนทุกครั้งที่ข้อมูลเซิร์ฟเวอร์ของฉันเป็นสคริปต์โดยตรงฉันต้องการเติมช่องข้อความบางส่วน ฉันก็เลยลองทำแบบนี้ string ConnectString = "datasource = txtmysource.Text; username = txtmyusername.Text; password = txtmypassword.Text; database = txtmydatabasename.Text"; โดยที่ txtmysource.Text / txtmyusername.Text / txtmypassword.Text / txtmydatabasename.Text เป็นชื่อของกล่องข้อความใน UI แต่ฉันไม่สามารถหาวิธีเขียนได้
9 c#  database 

3
ประเภทการอ้างอิงเป็นโมฆะใน C # 8 เมื่อใช้คลาส DTO กับ ORM
ฉันเปิดใช้งานคุณลักษณะนี้ในโครงการที่มีคลาส data data object (DTO) ตามที่ระบุด้านล่าง: public class Connection { public string ServiceUrl { get; set; } public string? UserName { get; set; } public string? Password { get; set; } //... others } แต่ฉันได้รับข้อผิดพลาด: CS8618: คุณสมบัติที่ไม่สามารถลบล้างได้ 'ServiceUrl' ไม่ได้ถูกกำหนดค่าเริ่มต้น พิจารณาประกาศคุณสมบัติเป็นโมฆะ นี่คือคลาส DTO ดังนั้นฉันไม่ได้เริ่มต้นคุณสมบัติ สิ่งนี้จะเป็นความรับผิดชอบของรหัสในการเริ่มต้นคลาสเพื่อให้แน่ใจว่าคุณสมบัติไม่เป็นโมฆะ ตัวอย่างเช่นผู้โทรสามารถทำได้: var connection = new Connection …

1
ชี้แจงเกี่ยวกับวิธีที่ IAsyncEnumerable ทำงานร่วมกับ ASP.NET Web API
ฉันพบพฤติกรรมที่น่าสนใจขณะสำรวจ IAsyncEnumerable ในโครงการ ASP.NET Web API พิจารณาตัวอย่างรหัสต่อไปนี้: // Code Sample 1 [HttpGet] public async IAsyncEnumerable<int> GetAsync() { for (int i = 0; i < 10; i++) { await Task.Delay(1000); yield return i; } } // Code Sample 2 [HttpGet] public async IAsyncEnumerable<string> GetAsync() { for (int i = 0; i …

3
จะประกาศภารกิจที่ยังไม่เริ่มต้นซึ่งจะรองานอื่นได้อย่างไร
ฉันทำการทดสอบหน่วยนี้แล้วและฉันไม่เข้าใจว่าทำไม "รอ Task.Delay ()" ไม่รอ! [TestMethod] public async Task SimpleTest() { bool isOK = false; Task myTask = new Task(async () => { Console.WriteLine("Task.BeforeDelay"); await Task.Delay(1000); Console.WriteLine("Task.AfterDelay"); isOK = true; Console.WriteLine("Task.Ended"); }); Console.WriteLine("Main.BeforeStart"); myTask.Start(); Console.WriteLine("Main.AfterStart"); await myTask; Console.WriteLine("Main.AfterAwait"); Assert.IsTrue(isOK, "OK"); } นี่คือผลลัพธ์ของการทดสอบหน่วย: สิ่งนี้เป็นไปได้อย่างไร "รอ" ไม่รอและเธรดหลักยังคงดำเนินต่อไป?

2
C # ไม่สามารถทำให้ `notnull 'ประเภทเป็นโมฆะ
ฉันพยายามสร้างประเภทที่คล้ายกับ Rust's Resultหรือ Haskell Eitherและฉันก็เข้าใจได้: public struct Result<TResult, TError> where TResult : notnull where TError : notnull { private readonly OneOf<TResult, TError> Value; public Result(TResult result) => Value = result; public Result(TError error) => Value = error; public static implicit operator Result<TResult, TError>(TResult result) => new Result<TResult, TError>(result); public static …

1
สิ่งที่สามารถอธิบายค่าใช้จ่ายในการใช้ const ในกรณีนี้
ฉันกระแทกหัวของฉันกับกำแพงที่นี่ดังนั้นฉันหวังว่าบางท่านอาจจะให้การศึกษาแก่ฉัน ฉันกำลังทำการวัดประสิทธิภาพโดยใช้ BenchmarkDotNet และฉันพบกรณีแปลก ๆ นี้ซึ่งดูเหมือนว่าการประกาศสมาชิกconstลดประสิทธิภาพลงอย่างมาก using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Running; using System; namespace PerfTest { [DisassemblyDiagnoser(printAsm: true, printSource: true)] public class Test { private int[] data; private int Threshold = 90; private const int ConstThreshold = 90; [GlobalSetup] public void GlobalSetup() { data = new int[1000]; var random = new …

3
การรวมภายหลังแก้ปัญหาแบบไดนามิกหลังจากเข้าสู่คอนโทรลเลอร์
ฉันกำลังมองหาวิธีแก้ไขโมเดลหลังจากเข้าสู่การกระทำในคอนโทรลเลอร์วิธีที่ง่ายที่สุดในการอธิบายปัญหาคือ: public DTO[] Get(string filterName) { //How can I do this this.Resolve<MyCustomType>("MyParamName"); } หากคุณกำลังมองหาข้อมูลเพิ่มเติมว่าทำไมฉันถึงพยายามทำเช่นนั้นคุณสามารถอ่านต่อเพื่อรับภาพเต็ม TL; DR ฉันกำลังมองหาวิธีในการแก้ไขแบบจำลองคำขอโดยกำหนดชื่อพารามิเตอร์ที่จะได้รับการแก้ไขจากสตริงข้อความค้นหาฉันจะลงทะเบียนตัวกรองแบบไดนามิกได้อย่างไรจากการเริ่มต้น ฉันมีชั้นเรียนที่จะจัดการกับการลงทะเบียนตัวกรองของฉัน ในระดับเริ่มต้นของฉันฉันต้องการที่จะสามารถลงทะเบียนตัวกรองแบบไดนามิกกับส่วนที่เหลือของฉันบริการ ฉันมีตัวเลือกที่ฉันใช้ส่งผ่านไปยัง ControllerFeatureProvider ที่กำหนดเองซึ่งมีลักษณะโดยประมาณดังนี้: public class DynamicControllerOptions<TEntity, TDTO> { Dictionary<string, Func<HttpContext, Expression<Func<TEntity, bool>>>> _funcNameToEndpointResolverMap = new Dictionary<string, Func<HttpContext, Expression<Func<TEntity, bool>>>>(); Dictionary<string, List<ParameterOptions>> _filterParamsMap = new Dictionary<string, List<ParameterOptions>>(); public void AddFilter(string filterName, Expression<Func<TEntity, …

1
ฉันจะสร้างไฟล์ .proto หรือใช้ 'Code First gRPC' จากคลาส C # ได้อย่างไร
ฉันต้องการใช้ gRPC กับ. NET core 3 ในแอปพลิเคชันเว็บหลัก asp.net ฉันจะสร้างไฟล์ .proto ที่จำเป็นจากวัตถุคลาส C # และโมเดลที่มีอยู่ได้อย่างไร ฉันไม่ต้องการเขียนไฟล์ .proto อีกครั้งซึ่งทำมิเรอร์โค้ดที่มีอยู่ฉันต้องการให้ไฟล์. proto นั้นสร้างขึ้นโดยอัตโนมัติจากคลาสและวัตถุโมเดล ฉันเรียกวิธีนี้เพื่อลงทะเบียนระดับบริการของฉัน builder.MapGrpcService<MyGrpcService>(); public class MyGrpcService { public Task<string> ServiceMethod(ModelObject model, ServerCallContext context) { return Task.FromResult("It Worked"); } } ModelObjectมี[DataContract]และ[DataMember]มีคุณสมบัติการสั่งซื้อ เป็นไปได้ไหม ทุกตัวอย่างที่ฉันเห็นออนไลน์เริ่มต้นด้วย.protoไฟล์ ฉันได้กำหนดวิธีการบริการที่ต้องการในMyGrpcServiceชั้นเรียนแล้ว แต่นี่อาจจะย้อนกลับไปที่สิ่งที่เป็นวิธีมาตรฐานในการทำสิ่งต่าง ๆ ... สิ่งที่ต้องการการ remoting .NET แบบเก่านั้นเหมาะอย่างยิ่งที่คุณสามารถขออินเทอร์เฟซจากจุดปลายทางระยะไกลและใช้gRPCเพื่อสื่อสารไปมาอย่างน่าอัศจรรย์แต่บางทีมันอาจดูง่ายเกินไป

2
ไม่จำเป็นต้องกำหนดพารามิเตอร์ประเภทโครงสร้างออก
ฉันสังเกตเห็นพฤติกรรมที่แปลกประหลาดบางอย่างในรหัสของฉันเมื่อมีการใส่เครื่องหมายในบรรทัดของฟังก์ชันระหว่างการตรวจสอบโค้ดโดยไม่ตั้งใจ มันยากมากที่จะทำซ้ำ แต่ฉันจะแสดงตัวอย่างที่คล้ายกันที่นี่ ฉันมีคลาสทดสอบนี้แล้ว: public class Test { public void GetOut(out EmailAddress email) { try { Foo(email); } catch { } } public void Foo(EmailAddress email) { } } ไม่มีการมอบหมายให้กับอีเมลGetOutซึ่งโดยปกติจะทำให้เกิดข้อผิดพลาด: ต้องกำหนดพารามิเตอร์ 'อีเมล' ก่อนจึงจะออกจากวิธีการปัจจุบัน อย่างไรก็ตามหาก EmailAddress อยู่ในโครงสร้างในแอสเซมบลีที่แยกจากกันจะไม่มีข้อผิดพลาดเกิดขึ้น public struct EmailAddress { #region Constructors public EmailAddress(string email) : this(email, string.Empty) { } …
9 c#  .net 

1
การอ่าน AuthorizationFilterContext ใน netcore api 3.1
ฉันมีโครงการ netcore 2.2 ที่ใช้งานได้ซึ่งฉันได้นำนโยบายที่กำหนดเองมาใช้เพื่อตรวจสอบคีย์ API ใน startup.cs ฉันกำลังเพิ่มนโยบายนี้เช่นนี้ //Add Key Policy services.AddAuthorization(options => { options.AddPolicy("AppKey", policy => policy.Requirements.Add(new AppKeyRequirement())); }); ใน AppKeyRequirement ฉันสืบทอดมาจาก AuthorizationHandler และแก้ไขคีย์ในคำขอที่เข้ามาเช่นนี้ protected override Task HandleRequirementAsync(AuthorizationHandlerContext authContext, AppKeyRequirement requirement) { var authorizationFilterContext = (AuthorizationFilterContext)authContext.Resource; var query = authorizationFilterContext.HttpContext.Request.Query; if (query.ContainsKey("key") && query.ContainsKey("app")) { // Do stuff สิ่งนี้ไม่ทำงานใน …

1
พฤติกรรมการเก็บขยะสำหรับนักทำลาย
ฉันมีคลาสง่าย ๆ ที่กำหนดไว้ด้านล่าง public class Person { public Person() { } public override string ToString() { return "I Still Exist!"; } ~Person() { p = this; } public static Person p; } ในวิธีการหลัก public static void Main(string[] args) { var x = new Person(); x = null; GC.Collect(); GC.WaitForPendingFinalizers(); Console.WriteLine(Person.p …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.