在 C# 中,假设您有一个简单的类:
public class MyFloat
{
public float Value { get; set; }
public MyFloat()
{}
public MyFloat(float _Value)
{
Value = _Value;
}
}
是否存在这样的语法,允许您将其 Value 属性简写为如下内容:
MyFloat[] Arg_f;
Arg_f = new MyFloat[] { 1, 2, 3 };
而不是需要显式调用构造函数,例如:
Arg_f = new MyFloat[] { new MyFloat(1), new MyFloat(2), new MyFloat(3) };
或等效地,即
MyFloat myFloat = 5f; //Implicitly assign 5f to myFloat.Value
float myFloatValue = myFloat; //Implicitly get myFloat.Value
这显然类似于装箱/拆箱,只是我试图“装箱”到特定的对象属性中。或者你可能会说我正在尝试通过赋值隐式调用 1-arg 构造函数。
这样的事情在 C# 中是否可行,或者我只是在徒劳地追逐?
最佳答案
这可以通过 implicit conversion 来实现:
public static implicit operator MyFloat(float f)
{
return new MyFloat(f);
}
现在这将起作用:
var myFloats = new MyFloat[] { 1, 2 };
This is obviously similar to boxing/unboxing, except that I'm trying to "box" into a specific object property.
这与装箱无关,而是关于将一种类型隐式转换为另一种类型的能力,因为您不需要显式类型声明。
就我个人而言,虽然可能,但我不喜欢使用隐式转换。它们会导致歧义(“这是如何转换为 MyFloat
的?”)并且可能会让开发人员在阅读代码库时感到惊讶。
关于C# "Boxing"通过赋值进入属性/1-Arg 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33246783/