gpt4 book ai didi

c# - 是否可以在 C# 中为 IBAN、BIC 创建一个非常简单的值类型?

转载 作者:行者123 更新时间:2023-12-03 22:16:00 25 4
gpt4 key购买 nike

是否可以在 C# 中为 IBAN、BIC(可能使用 struct)创建一个非常简单的值类型?这会自动适用于 Json 序列化和 EF Core 保存等功能吗?

我想在转换为 Json 的数据对象以及通过 EF Core 存储的实体中使用原始类型

public class AccountTransaction
{
public Iban RecipientIban { get; set; }
public Bic RecipientBic { get; set; }
}

例如对于 EF Core,我不想在每次使用这些类型时指定一些值转换器。或者我不想在每次在对象中使用这些类型时指定一些自定义 JsonSerializer。它们或多或少应该像通常的字符串一样工作。

此外,目标是在分配时实现一些自动验证。例如:
Iban ibanVariable = "ILLEGAL IBAN";

这种调用会自动导致错误。 (还有从数据库读取/反序列化 Jsons 等)

有什么简单的方法可以实现这一目标吗?有没有 FromString()东西或赋值运算符在 struct我可以覆盖(比如 operator-overloading )?

最佳答案

您可以通过使用隐式转换运算符来实现这一点。这些基本上允许您定义从一种类型到另一种类型的转换。这些转换可以是显式的,因此您每次都需要显式转换它们,或者它们可以是隐式的,因此它只是这样做。下面是一个例子:

public class Iban
{
private readonly string _ibanString;

public Iban(string iban)
{
_ibanString = iban;
}

public static implicit operator Iban(string iban) => new Iban(iban);

public static implicit operator string(Iban iban) => iban._ibanString;
}

你现在可以这样做:

Iban iban = "SOME IBAN";

隐式/显式运算符语法的快速分割以及指向 MSDN 文档的链接:

基本上,运算符必须始终是 public static其次是 implicitexplicit关键字,然后跟随将返回的类型(很像方法),最后您可以指定一个用于转换的参数。之后,您可以像我一样使用方法中的表达式主体语法,也可以使用带有 { ... return foo; } 的实际主体。和所有。

这是 promise 的 MSDN 链接: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/user-defined-conversion-operators

注 1:我刚刚重新阅读了您的标题,您要求的是值类型,这同样简单。您需要做的就是更换 public class Ibanpublic struct Iban .

注 2:当您在类上隐式定义运算符时,您可以使用显式转换,但是当您仅在类上显式定义运算符时,您不能隐式转换它们。因此,对于隐式运算符,这是完全合法的:

var iban = (Iban) "SOME IBAN";

但是当您有显式运算符时,以下内容变得非法,您必须显式转换它:

// Throws a compiler error
Iban iban = "SOME IBAN"

关于c# - 是否可以在 C# 中为 IBAN、BIC 创建一个非常简单的值类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58523890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com