C#"拳击"到属性/ 1-Arg构造函数按作业分配

Met*_*450 4 c#

在C#中,假设你有一个简单的类,如:

public class MyFloat
{
    public float Value { get; set; }

    public MyFloat()
    {}

    public MyFloat(float _Value)
    {
        Value = _Value;
    }
}
Run Code Online (Sandbox Code Playgroud)

是否存在这样的语法,允许您将其Value属性简写为以下内容:

MyFloat[] Arg_f;
Arg_f = new MyFloat[] { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)

而不是需要显式调用构造函数,如:

Arg_f = new MyFloat[] { new MyFloat(1), new MyFloat(2), new MyFloat(3) };
Run Code Online (Sandbox Code Playgroud)

或等效地,即

MyFloat myFloat = 5f;          //Implicitly assign 5f to myFloat.Value
float myFloatValue = myFloat;  //Implicitly get myFloat.Value
Run Code Online (Sandbox Code Playgroud)

这显然类似于装箱/拆箱,除了我试图"装箱"到特定的对象属性.或者你可能会说我试图通过赋值隐式调用1-arg构造函数.

这样的事情在C#中是可能的,还是我只是在疯狂的追逐?

Yuv*_*kov 8

这可以通过隐式转换实现:

public static implicit operator MyFloat(float f)
{
      return new MyFloat(f);
}
Run Code Online (Sandbox Code Playgroud)

现在这将工作:

 var myFloats = new MyFloat[] { 1, 2 };
Run Code Online (Sandbox Code Playgroud)

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

这不是关于拳击,它是关于将一​​种类型转换为另一种类型的能力,隐式地,因为您不希望显式类型声明.

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