在C#中,假设您有一个简单的类,如:
public class MyFloat
{
public float Value { get; set; }
public MyFloat()
{}
public MyFloat(float _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#中,这样的事情可能发生吗?还是我只是在白费力气呢?
发布于 2015-10-20 21:12:48
这可以通过https://msdn.microsoft.com/en-us/library/85w54y0a.aspx实现。
public static implicit operator MyFloat(float f)
{
return new MyFloat(f);
}现在,这将起作用:
var myFloats = new MyFloat[] { 1, 2 };这显然类似于装箱/取消装箱,只是我试图将“框”放入特定的对象属性中。
这与装箱无关,而是关于将一种类型转换为另一种类型的能力,因为您不希望显式类型声明。
就个人而言,尽管可能,我不喜欢使用隐式转换。它们会引起歧义(“这是如何转换为MyFloat的?”)在阅读代码库时,可能会让开发人员感到惊讶。
https://stackoverflow.com/questions/33246783
复制相似问题