首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过赋值将C# "Boxing“转换为属性/ 1-Arg构造函数

通过赋值将C# "Boxing“转换为属性/ 1-Arg构造函数
EN

Stack Overflow用户
提问于 2015-10-20 21:06:35
回答 1查看 141关注 0票数 4

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

代码语言:javascript
复制
public class MyFloat
{
    public float Value { get; set; }

    public MyFloat()
    {}

    public MyFloat(float _Value)
    {
        Value = _Value;
    }
}

是否存在这样一种语法,允许您将其值属性简短地初始化为如下所示:

代码语言:javascript
复制
MyFloat[] Arg_f;
Arg_f = new MyFloat[] { 1, 2, 3 };

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

代码语言:javascript
复制
Arg_f = new MyFloat[] { new MyFloat(1), new MyFloat(2), new MyFloat(3) };

或等效,即:

代码语言:javascript
复制
MyFloat myFloat = 5f;          //Implicitly assign 5f to myFloat.Value
float myFloatValue = myFloat;  //Implicitly get myFloat.Value

这显然类似于装箱/取消装箱,只是我试图将“框”放入特定的对象属性中。或者您可能会说,我试图通过赋值隐式调用1-arg构造函数。

在C#中,这样的事情可能发生吗?还是我只是在白费力气呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-20 21:12:48

这可以通过https://msdn.microsoft.com/en-us/library/85w54y0a.aspx实现。

代码语言:javascript
复制
public static implicit operator MyFloat(float f)
{
      return new MyFloat(f);
}

现在,这将起作用:

代码语言:javascript
复制
 var myFloats = new MyFloat[] { 1, 2 };

这显然类似于装箱/取消装箱,只是我试图将“框”放入特定的对象属性中。

这与装箱无关,而是关于将一种类型转换为另一种类型的能力,因为您不希望显式类型声明。

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33246783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档