c#“Boxing"通过赋值将其转换为一个属性/ 1参数构造函数

本文关键字:一个 属性 构造函数 参数 转换 quot Boxing 赋值 | 更新日期: 2023-09-27 18:18:31

在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个参数的构造函数。

是像这样的东西可能在c#中,还是我只是在徒劳的追逐?

c#“Boxing"通过赋值将其转换为一个属性/ 1参数构造函数

这可以通过隐式转换:

实现
public static implicit operator MyFloat(float f)
{
      return new MyFloat(f);
}

现在可以运行了:

 var myFloats = new MyFloat[] { 1, 2 };

这显然类似于装箱/拆箱,除了我试图"装箱"到一个特定的对象属性。

这不是关于装箱,而是关于隐式地将一种类型转换为另一种类型的能力,因为您不需要显式的类型声明。

就我个人而言,尽管可能,我不喜欢使用隐式转换。它们会导致歧义("如何将其转换为MyFloat ?"),并且可能会使开发人员在阅读代码库时感到惊讶。