gpt4 book ai didi

c# - 如何允许隐式转换?

转载 作者:可可西里 更新时间:2023-11-01 08:14:27 26 4
gpt4 key购买 nike

给定一些这样的代码:

class Json
{
}

class Program
{
static void Main(string[] args)
{
}

Json MyAction()
{
return "{\"json\": 1}";
}
}

有什么我可以添加到 Json 类来编译的吗?让编译器知道它可以将字符串隐式转换为 Json 的东西?

最佳答案

implicit C# 中的运算符声明允许您指定:

{type to convert to} ({type to convert from} variablename)

这是一个简单的例子:

class Json
{
private Json(string json)
{
//logic to parse string into object
}

public static implicit operator Json(string input)
{
return new Json(input);
}
}

一些注意事项:

  • 首先,我不一定要走这条路,因为应用程序中的大多数字符串在语义上并不等同于 JSON 字符串。转换运算符的目的是说两种类型始终表示语义等价信息(或足够接近语义等价以被有效地对待)。我建议在您的 Json 类上实现 static Json Parse(string input) 或者甚至是 static bool TryParse(string input, out Json json) 方法。通常,调用站点应该知道它是否希望自己的字符串包含 Json。

  • 通常,如果我的类提供从某个类型进行的隐式类型转换,我发现最好为同一类型private 进行任何解析或 ctor 逻辑。这确保消费者只有一种方式来做特定的事情,而不是两种方式(ctor 和转换)——因此是上面示例中的私有(private) ctor。这可能有异常(exception),但对我来说这是一个很好的一般规则。

  • 隐式转换还允许使用比较运算符进行一些有趣的操作。例如,现在您可以从字符串隐式转换为 json,您还可以执行:if(myJson == "blah") 它会进行转换,然后调用 == Json 对象上的运算符,默认情况下会进行引用相等性比较。

关于c# - 如何允许隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4580085/

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