给出一些像这样的代码:
class Json
{
}
class Program
{
static void Main(string[] args)
{
}
Json MyAction()
{
return "{\"json\": 1}";
}
}
Run Code Online (Sandbox Code Playgroud)
有什么东西可以添加到Json类中进行编译吗?有什么东西让编译器知道它可以隐式地将字符串转换为Json?
Rex*_*x M 36
implicitc#中的操作符声明允许您指定:
{type to convert to} ({type to convert from} variablename)
Run Code Online (Sandbox Code Playgroud)
这是一个简单的例子:
class Json
{
private Json(string json)
{
//logic to parse string into object
}
public static implicit operator Json(string input)
{
return new Json(input);
}
}
Run Code Online (Sandbox Code Playgroud)
一些说明:
首先,我不一定会走这条路,因为应用程序中的大多数字符串在语义上都不等同于JSON字符串.转换运算符的目的是说两种类型总是表示语义上等效的信息(或者足够接近于语义上等同于被有效地处理的信息).我建议在你的Json类上实现一个static Json Parse(string input)或者甚至一个static bool TryParse(string input, out Json json)方法.通常,callsite应该知道它是否希望自己的字符串包含Json.
通常,如果我的类提供了类型的隐式类型转换,我发现最好为同一类型进行任何解析或ctor逻辑private.这确保了消费者只有一种方式可以做某件事,而不是两种方式(ctor和转换) - 因此上面例子中的私人ctor.可以有例外,但这对我来说是一个很好的一般规则.
隐式转换还允许使用比较运算符进行一些有趣的事情.例如,现在您可以隐式地将字符串转换为json,您也可以执行以下操作:if(myJson == "blah")它将执行转换,然后==在Json对象上调用运算符,默认情况下将执行引用相等性比较.
| 归档时间: |
|
| 查看次数: |
11852 次 |
| 最近记录: |