首页
关于
Search
1
C#对接chatgpt
127 阅读
2
C语言中的类型衰变
122 阅读
3
免费ChatGPTKey分享
121 阅读
4
winform中combobox绑定数据源
112 阅读
5
反射异步调用
73 阅读
技术分享
后端分享
前端分享
福利活动
资源分享
天天向上
登录
/
注册
Search
标签搜索
C#
ChatGpt
DotNet
.NET
SSE
Stream
winform
c
dynamic
反序列化
反射
异步
gpt
ai
西街长安
累计撰写
12
篇文章
累计收到
45
条评论
首页
栏目
技术分享
后端分享
前端分享
福利活动
资源分享
天天向上
页面
关于
搜索到
10
篇与
的结果
2024-01-23
C#委托和匿名方法
在C#中,委托是一种强大的类型,允许将方法作为参数传递,从而实现回调和事件处理等功能。本文将首先介绍委托的基础概念,然后深入探讨匿名方法和 Lambda 表达式,这两者是在C#中使用委托时的有力补充。{mtitle title="委托基础"/}using System; // 定义委托 delegate void MyDelegate(int x); class Program { static void Main() { // 创建委托实例并关联方法 MyDelegate myDelegate = new MyDelegate(PrintNumber); // 调用委托,实际上调用了关联的方法 myDelegate(42); } // 委托关联的方法 static void PrintNumber(int num) { Console.WriteLine("Number: " + num); } }上面的例子中,我们定义了一个委托 MyDelegate,它可以引用带有一个整数参数的方法。然后,我们创建了委托的实例,并将其关联到 PrintNumber 方法上,最终通过调用委托来执行方法。{mtitle title="匿名方法的应用"/}匿名方法是一种没有显式命名的方法,通常用于传递给委托或事件处理程序。它允许在需要时直接定义和使用方法,而无需为其命名。using System; class Program { delegate void MyDelegate(int x); static void Main() { // 使用匿名方法创建委托实例 MyDelegate myDelegate = delegate (int x) { Console.WriteLine("匿名方法被调用,参数为: " + x); }; // 调用委托 myDelegate(10); } } 在这个例子中,我们使用匿名方法创建了一个委托实例,它会在调用时输出参数的信息。{mtitle title="引出Lambda表达式"/}Lambda 表达式是C# 3.0及更高版本引入的一项功能,用于更简洁地表示匿名方法。它进一步简化了代码,使得处理委托变得更加方便。using System; class Program { delegate void MyDelegate(int x); static void Main() { // 使用 Lambda 表达式创建委托实例 MyDelegate myDelegateLambda = (int x) => { Console.WriteLine("Lambda 表达式被调用,参数为: " + x); }; // 调用委托 myDelegateLambda(20); // Lambda 表达式的更简洁形式 MyDelegate conciseLambda = x => Console.WriteLine("更简洁的 Lambda,参数为: " + x); conciseLambda(30); } } Lambda 表达式在语法上更为紧凑,使得代码更易读且更简洁。在处理简单的委托场景时,Lambda 表达式是更推荐的选择。{card-describe title="卡片描述"}通过委托、匿名方法和 Lambda 表达式,C# 提供了丰富的工具来处理方法引用和回调,使得代码更加灵活和可维护。在选择使用匿名方法或 Lambda 表达式时,可以根据代码的复杂性和可读性来做出合适的选择。{/card-describe}
2024年01月23日
39 阅读
1 评论
1 点赞
2024-01-23
C#中的Return Switch写法
C#中的Return Switch写法在C#中,处理条件分支时,我们经常会使用 switch 语句。在这篇博客文章中,我们将探讨传统的 switch 写法和一种更简洁、易读的 return switch 写法,并比较它们之间的区别和优势。原始写法首先,让我们看一下传统的 switch 写法:public static string GetDayOfWeek(int dayNumber) { string dayName = ""; switch (dayNumber) { case 1: dayName = "Sunday"; break; case 2: dayName = "Monday"; break; // ... 其他case ... default: dayName = "Invalid Day Number"; break; } return dayName; }在这个例子中,我们使用 switch 语句根据输入的 dayNumber 返回相应的字符串,处理了每个可能的情况,最后使用 default 处理了没有匹配的情况。引入Return Switch写法尽管上面的写法是有效的,但我们可以通过使用 return switch 表达式来使代码更加紧凑和可读。public static string GetDayOfWeek(int dayNumber) { return dayNumber switch { 1 => "Sunday", 2 => "Monday", // ... 其他case ... _ => "Invalid Day Number" }; }在这个写法中,我们直接在 return 语句中使用了 switch 表达式。每个情况都通过 => 关联一个结果,而 _则表示默认情况。区别与优势1. 简洁性原始写法: 需要声明变量,然后在每个 case 中赋值,最后返回该变量。Return Switch写法: 直接通过表达式返回结果,减少了冗余。2. 可读性原始写法: 使用 break 中断每个 case,需要额外的 default 处理默认情况。Return Switch写法: 表达式直观,减少了冗余语法,提高了可读性。3. 默认情况原始写法: 使用 default 处理没有匹配的情况。Return Switch写法: 使用 _表示默认情况,更加清晰。{callout color="#ef4d4d"}注意:此写法在C#8.0后才支持{/callout}总结通过使用 return switch 写法,我们可以更清晰、更简洁地处理条件分支,提高了代码的可读性。这种写法在处理简单的情况分支时特别有用,使代码更加优雅。在选择条件分支写法时,可以根据具体情况来考虑使用 return switch 的简便性和清晰性。
2024年01月23日
42 阅读
0 评论
1 点赞
2023-10-18
免费ChatGPTKey分享
前言由于众所周知的原因,OpenAI 的 API 在国内访问困难,因此目前出现了一批二手 API 卖家,但是这些二手 API 卖家的稳定性存疑。本项目的目的旨在聚合众多 API 接口,以提供一个尽量稳定的 API 访问渠道。同时本项目也可作为 OpenAI 的 API 代理服务器使用。Key免费chatgptkey,内涵10美元额度代理地址: gptkey.nxsir.cn key:sk-QgPZ7rv8WkuEQX3gE00501F9FaEb4d80B2C1DcB3183a5407 福利群点击链接加入群聊【GPTApi】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=GMXrovA9E25UXizEaFMi8bnt3py0f3GP&authKey=1FAXYHuFtD1cbqGUnfytkevTrJouFOolf%2BT%2FeJcYcz3WazI1KPIZ1Jp%2Bmlj8NFs%2B&noverify=0&group_code=822289210 #### !!!群内不定期分享免费Key!!!
2023年10月18日
121 阅读
0 评论
2 点赞
2023-07-20
不等于自己:浮点数中的NaN特殊性
在计算机科学中,浮点数是一种用于表示带有小数部分的实数的数据类型。除了常规的数字,浮点数还包含了一些特殊值,其中之一就是NaN(Not-a-Number),即“非数字”。NaN的特殊性NaN是浮点数中的一个特殊值,它在进行自我比较时表现出独特的行为:与任何其他值(包括它自己)进行比较都将返回false。让我们来看一个使用C#语言的示例程序,来演示NaN不等于自己的情况:internal class Program { static void Main(string[] args) { double a = double.NaN; Console.WriteLine(a == a); // 输出:False } }在上述代码中,我们声明了一个Program的内部类,并在Main方法中定义了一个double类型的变量a,并将其初始化为double.NaN。接下来,我们使用表达式a == a来比较a是否等于自己,并将结果打印到控制台。正常情况下,对于任何数值,它们都应该等于自己,所以这个比较应该返回True。然而,由于a是NaN,该比较却返回了False,展现了NaN的特殊性。为什么会这样?NaN代表的是一个未定义或无效的结果,它与其他任何数值都不相等。这是由于NaN的本质决定的,它不同于其他数字类型,因此不遵循普通的数值比较规则。在实际应用中的注意事项当涉及到浮点数运算时,我们需要小心处理可能出现NaN的情况。特别是在做相等性比较时,应该避免直接使用==运算符,而是使用double.IsNaN()方法来检查一个值是否为NaN。double result = SomeOperation(); if (double.IsNaN(result)) { // 处理NaN的情况 } else { // 处理正常结果的情况 }结论NaN在浮点数中具有特殊性质:它不等于任何值,包括它自己。在进行浮点数运算时,务必要注意NaN的可能出现,并采取适当的措施来处理它,以避免产生不确定的结果。
2023年07月20日
52 阅读
0 评论
1 点赞
2023-07-06
反射异步调用
在 C# 中,通过反射获取到的方法可以使用异步调用。以下是一种实现异步调用反射方法的示例代码:using System; using System.Reflection; using System.Threading.Tasks; public class Program { public static async Task Main() { // 获取方法所在的类型 Type type = typeof(MyClass); // 创建类型的实例 object instance = Activator.CreateInstance(type); // 获取方法信息 MethodInfo methodInfo = type.GetMethod("MyMethod"); // 检查方法是否可异步调用 if (methodInfo.ReturnType == typeof(Task)) { // 调用异步方法 Task task = (Task)methodInfo.Invoke(instance, null); // 等待异步方法完成 await task; } else if (methodInfo.ReturnType.IsGenericType && methodInfo.ReturnType.GetGenericTypeDefinition() == typeof(Task<>)) { // 调用异步方法 dynamic task = methodInfo.Invoke(instance, null); // 等待异步方法完成并获取结果 dynamic result = await task; // 使用结果 Console.WriteLine(result); } } } public class MyClass { public async Task MyMethod() { // 异步方法的实现 await Task.Delay(1000); Console.WriteLine("Async method completed."); } }在上面的示例中,我们通过反射获取到了名为 "MyMethod" 的方法,并判断其返回类型来确定它是否为异步方法。如果返回类型是 Task,则使用 (Task)methodInfo.Invoke(instance, null) 异步调用方法并等待其完成。如果返回类型是泛型类型 Task<T>,则使用 dynamic 类型来调用异步方法并等待其完成,并获取到结果后进行处理。请注意,如果你要使用异步方法的返回值,需要在调用异步方法之前使用 await 关键字等待异步方法完成,并根据需要处理异步方法的返回值。
2023年07月06日
73 阅读
0 评论
0 点赞
1
2