详解C#如何实现隐式类型转换
作者:Newbe36524 发布时间:2022-08-30 06:32:42
Result 类型是许多编程语言中处理错误的常用方式,包括 C# 的 dotNext 库。在本文中,我们将通过例子回顾 C# 中 using 语句和隐式类型转换的使用。
预期效果
下面是一个示例代码,演示了 Result 类型的使用方法:
namespace TestProject1;
public class GetResultTests
{
[Test]
public void Test1()
{
// 通过 GetResult 方法获取 Result 类型的返回值
var result = GetResult();
Assert.Pass();
}
public Result GetResult()
{
if (DateTime.Now.Second > 30)
{
// 如果成功,返回 Ok
return Ok();
}
else
{
// 如果失败,返回 Error
return Error();
}
}
}
此文为了简易演示没有演示带值的 Result 类型,实际使用中可以通过泛型来实现带值的 Result 类型。
下面我们来通过一些步骤来实现这个功能。
static using 与 global using
在 C# 中,using 语句用于指定要包含在代码文件中的命名空间。其 * 殊的,Static Using 和 Global Using 需要特别介绍一下。
Static Using 允许你在不指定命名空间的情况下访问命名空间中的类型。特别对于静态方法,这很有用。
例如,你可以使用以下代码使用 Static Using:
using static System.Math;
double x = 3.14;
double y = Sqrt(x);
Console.WriteLine(y); // Outputs 1.77
在这个例子中,我们使用 Static Using 将 System.Math 命名空间包含在代码文件中,并使用 Sqrt 函数。
Global Using 允许你在整个代码文件中包含命名空间中的所有类型。
int[] numbers = { 1, 2, 3, 4, 5 };
int sum = numbers.Sum();
Console.WriteLine(sum); // Outputs 15
而在 Using.cs 文件中,我们可以使用 Global Using:
global using System.Linq;
在这个例子中,我们使用 Global Using 将 System.Linq 命名空间包含在代码文件中,并使用 Sum 函数计算数组 numbers 中的所有元素的和。
隐式类型转换
隐式类型转换允许你在不指定转换的情况下将一种类型的值转换为另一种类型。当你有一种类型的值,并需要将其作为另一种类型使用时,这很有用。
例如,你可以使用以下代码使用隐式类型转换将一个整数转换为一个 double:
int x = 1234;
double y = x;
Console.WriteLine(y); // Outputs 1234
我们也可以为自定义类型实现类型的隐式转换。比如此处我们定义一个 Id 类型,并且让其支持从 string 进行隐式类型转换。
public struct Id
{
public string Value { get; }
public Id(string value)
{
Value = value;
}
public static implicit operator Id(string value) => new Id(value);
}
那么我们就可以使用以下代码进行隐式类型转换:
Id id = "123";
实现 Result 类型
我们可以通过上面的知识来实现 Result 类型。
首先,我们定义一个 Result 类型,它包含一个 IsSuccess 属性。
public readonly struct Result
{
public Result(bool isSuccess)
{
IsSuccess = isSuccess;
}
public bool IsSuccess { get; }
}
然后我们分别定义两种类型的 Result,分别是 Ok 和 Error。
public readonly struct ErrorTag
{
}
public readonly struct SuccessTag
{
}
并且,我们在 Result 类型中实现对应的隐式类型转换。
public readonly struct Result
{
public Result(bool isSuccess)
{
IsSuccess = isSuccess;
}
public bool IsSuccess { get; }
public static implicit operator Result(SuccessTag _) => new Result(true);
public static implicit operator Result(ErrorTag _) => new Result(false);
}
这样,我们就可以使用以下代码来创建 Result 类型的实例:
Result ok = new SuccessTag();
Result error = new ErrorTag();
然后我们在按照预期,使用方法来取代 new SuccessTag() 和 new ErrorTag()。
public static class ResultHelper
{
public static SuccessTag Ok() => new();
public static ErrorTag Error() => new();
}
这样,我们就可以使用以下代码来创建 Result 类型的实例:
Result ok = ResultHelper.Ok();
Result error = ResultHelper.Error();
最终,我配合 static using 语法和 global using 语法。
global using static ResultHelper;
这样,我们就可以使用以下代码来创建 Result 类型的实例:
Result ok = Ok();
Result error = Error();
来源:https://www.cnblogs.com/newbe36524/p/17018761.html


猜你喜欢
- 本文实例为大家分享了java实现购物车功能的具体代码,供大家参考,具体内容如下1 需要实现1、实现淘淘商城的购物车功能2 购物车功能2.1
- 起因曾经用过西门子出的 * , 好处是直接有SDK开发包, 不会硬件开发也能直接使用缺点也是明显的, 就是只支持Windows系统, 另外就
- 最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的。为了统一使用友盟的全家桶,所以三方分享
- 概述:@Valid是使用Hibernate validation的时候使用@Validated是只用Spring Validator校验机制
- 根据需求,我们要拿到h5的错误信息,并将error信息进行上报。查询了下Android WebView的API发现了WebChromeCli
- package cn.hackcoder.beautyreader.broadcast;import android.content.Bro
- 在设置过webBrowser控件的ObjectForScripting属性后,还需要设置应用程序对com可见,不然会抛出一个异常(Objec
- 本文实例为大家分享了java数据库唯一id生成工具类的具体代码,供大家参考,具体内容如下import java.io.File;import
- mybatis count()按条件查询1、sql count()函数count()函数返回匹配指定条件的行数。sql count(colu
- 基本概念servlet 关系servlet 和 servletconfig 是一对一的关系;servletconfig 作用它存储 web.
- 多说无益,贴代码:/** * 校验银行卡卡号 * * @param cardId &nbs
- 有时候我们做Android开发,需要弹一个用户提示,但是有时候设计的提示弹窗是带有图片的,我们每次写一个特别麻烦。所以我特地封装了一个工具类
- 在html中大家都知道布局是什么意思了,简单来说就是将页面划分模块,比如html中的div、table等。那么Android中也是这样的。A
- 目录问题:解答方案:总结问题:我遇到了一个有趣的问题,它的代码大概是这样的。List<Func<int>> acti
- Spring的事务隔离级别和事务的传播行为是面试中经常考察的问题,做个简单的总结。传播行为在SpringBoot中通过Transaction
- println()直接打印我们都知道println()如果打印的是基本数据类型的话直接打印出来的就是值,你如果是引用数据类型呢?🍑除掉这四类
- Android中的Adapter在自定义显示列表时非常有用,比如SimpleAdapter,它的构造函数是:public SimpleAda
- 公司的一个手机端的 CRM 项目最近要增加小票打印的功能,就是我们点外卖的时候经常会见到的那种小票。这里主要涉及到两大块的知识:蓝牙连接及数
- 本文实例讲述了java继承中的构造方法。分享给大家供大家参考。具体如下:继承中的构造方法: 1、子类的构造过程中必须调用其基类的构造方法。2
- 本文实例讲述了C#中Arraylist的sort函数用法。分享给大家供大家参考。具体如下:ArrayList的sort函数有几种比较常用的重