如何让C#自定义结构体AddTwo支持直接整数赋值?
让自定义C#结构体支持直接整数赋值的方法
要实现像int这类内置值类型那样直接用x = 10;的方式给AddTwo结构体赋值,核心是为结构体定义隐式转换操作符,让编译器可以自动将int类型转换为AddTwo类型。
修改后的完整结构体代码
namespace Struct { struct AddTwo { public int Valor; // 定义从int到AddTwo的隐式转换操作符 public static implicit operator AddTwo(int value) { return new AddTwo { Valor = value }; } // 可选:定义从AddTwo到int的隐式转换,方便反向转换 public static implicit operator int(AddTwo addTwo) { return addTwo.Valor; } public override string ToString() { return (Valor + 2).ToString(); } } }
调用示例
// 直接用整数赋值,和int的赋值方式一致 AddTwo x = 10; Console.WriteLine(x); // 输出:12 // 可选:反向转换为int int y = x; Console.WriteLine(y); // 输出:10
原理说明
隐式转换操作符public static implicit operator AddTwo(int value)告诉编译器:当遇到把int值赋值给AddTwo变量的场景时,可以自动执行这个转换逻辑,创建一个AddTwo实例并给Valor属性赋值。这和内置值类型之间的隐式转换逻辑完全一致,实现了和int相同的赋值体验。
内容的提问来源于stack exchange,提问作者Sudo Sur
相关产品推荐
相关产品推荐

