c# - 我可以分配一个类型,就好像它是一个 int 或一个字符串
问题描述
假设我创建了一个类Number
。有没有一种方法可以像使用整数或字符串一样分配这种类型的变量?
Number n1 = 123;
Number n2 = "123";
我不介意有一个处理任何这些声明的构造函数,只要我可以这样写。
解决方案
您不能=
为用户定义的类型(例如您的Number
类)重载赋值运算符。但是,您可以使用构造函数方法,也可以使用用户定义的转换运算符。看起来像这样:
public class Number
{
private int _actualValue;
public Number(int value) => _actualValue = value;
// User defined conversion operators
// From int
public static implicit operator Number(int value)
=> new Number(value);
// From string
public static implicit operator Number(string value)
{
if (!int.TryParse(value, out _actualValue))
{
// Invalid format, couldn't parse
// Throw exception, or set _actualValue = 0
}
}
}
要使用它:
// From int
Number number = (Number)123;
// From string
Number number = (Number)"123";
// You can exclude the explicit "(Number)" cast
更多关于用户定义的转换操作在这里:https ://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/user-defined-conversion-operators
推荐阅读
- c - 重复代码的分离 - common.h 文件 - 使用自定义参数声明函数
- linux-kernel - 是否可以使用 RARP 在 uboot 中传输文件?
- vba - 删除两个文件夹上的标志状态
- sql - SQL Calculating Median per Product in Cursor
- c++ - std::map, std::unordered_map - 在初始化列表中缩小转换
- python - 在 for 循环中使用 df.query() 提取行数?
- kubernetes - 对 Terraform 列表使用花括号而不是方括号
- c# - 时间:2019-04-01 标签:c#regexsplitbinarystring
- python - 无法将图像上传到 Django 项目,获取表单对象没有属性“保存”
- ios - 如何使 TextView 的滚动条在 Swift 中始终可见