C# 是否可以将整数框入自定义类型对象?
可能重复:C# 是否可以将整数框入自定义类型对象?,c#,casting,boxing,C#,Casting,Boxing,可能重复: 我有一个试图装箱的int,以便在构造函数中使用它,该构造函数将其作为CustomType的参数对象 我的意思的一个例子 int x = 5; object a = x; CustomType test = new CustomType(a) //constructor in question public CustomType(CustomType a) { //set some variables etc } 但是,我得到以下错误 The best o
我有一个试图装箱的int,以便在构造函数中使用它,该构造函数将其作为
CustomType
的参数对象
我的意思的一个例子
int x = 5;
object a = x;
CustomType test = new CustomType(a)
//constructor in question
public CustomType(CustomType a)
{
//set some variables etc
}
但是,我得到以下错误
The best overloaded method match for X has some invalid arguments.
所以很明显,我偏离了目标。我哪里做错了?拳击是正确的解决方案还是我应该考虑类型转换?我不认为拳击或类型转换是你想要的。如果要将整数传递给构造函数,则构造函数的定义应如下所示:
public CustomType(int a) {
}
或者如果你想让它成为一个物体
public CustomType(object a) {
}
您应该使用显式类型转换并为此实现一些运算符。该构造函数将
自定义类型作为参数;您正在传递一个int
。int
不是CustomType
,C语言不知道从int
到CustomType
的隐式转换。这就是为什么你会出错
将int
强制转换为对象不会改变它仍然不是自定义类型的事实
看看那个特殊的构造函数,它是一个复制构造函数。它将自身的类型作为参数。有(人们希望)另一个构造函数接受另一个参数,不管是int,还是您没有提到的其他类型,或者可能没有参数,您只需要在创建默认对象后设置一个属性
至于实际的解决办法,有很多。以下是一些:
向接受int
的CustomType
添加一个额外的构造函数
定义一个函数,该函数将int
作为参数,并返回CustomObject
;这将是一个您可以使用的“转换”函数
使用默认构造函数CustomType
,并用整数设置属性(根据CustomType
的作用,可能适用,也可能不适用)
拳击似乎与手头的问题无关。它不是用来传递整数到自定义类型的东西。如果你想知道拳击是什么,它是如何工作的,或者当它有用的时候,然后考虑问一个解决这些问题的问题,因为这个特殊的问题会被拳击A所伤害。这是一个解决方案,没有帮助。
您的构造函数看起来像复制构造函数(复制对象)
如果要将对象变量传递给CustomType构造函数,则语法必须为:
public CustomType(Object a)
{
//Unboxing
int value = (int) a;
}
使用泛型
public CustomType<T>(T a)
{
//set some variables etc
}
公共自定义类型(TA)
{
//设置一些变量等
}
您可以将int
框到object
,但不能将其框到任意类型,并且您不能从框中取出不在框中的内容。例如int I=(int)(object)5;
将起作用,但CustomType x=(CustomType)(object)5;
将不起作用
您需要一个接受int
public CustomType(int a) {
....
}
顺便说一下,您创建了奇怪的递归。如果唯一的构造函数需要一个CustomType
,那么您需要另一个CustomType
对象来初始化第一个对象
CustomType ct = new CustomType(new CustomType(new CustomType(null)));
装箱是将(值的)值类型转换为
直接或间接基类(在int
的情况下,可以是ValueType
类或对象
类
值类型实现的接口(在int
的情况下,可以是IComparable
,IFormattable
,IConvertible
,IComparable
或IEquatable
)
由于您永远无法使int
具有其他基类或实现更多接口,因此无法将int
装箱到CustomType
中
如果您编写自己的struct
,那么您就可以决定它实现了什么接口,在这种情况下,struct
的值可以装箱到每个接口类型中。(但是,您不能更改struct
的基类。)
在类/structCustomType
中,可以定义fromint
到CustomType
,这样说是合法的
CustomType ct = 5;
但这不是拳击,只是“看不见的”调用您的隐式运算符
方法。原始对象5
未放入框中;它只是运算符方法的参数。您将使用此自定义类型
做什么?您的错误似乎与您提供的代码不匹配。要么是该对象,要么是您提供的示例太离谱了。您可以吗请给出一个更完整的示例说明您正在尝试执行的操作?K;退后一步…您正在尝试执行的操作是什么?如果您想将整数传递给构造函数,则可以使用整数参数..如果您想这样使用,请确保CustomType继承自Object。大多数内容都继承自Object
,因此我仍然不确定是什么如果你只是想把它转换成int,为什么不首先接受一个int
参数呢?作为一名学生,我们在课堂上看到了装箱和拆箱的原理。有时我们会练习装箱和拆箱值来理解这些原理。所以我猜他的问题是一个理解theo的问题然而,这段代码并没有演示关于装箱的任何原则,装箱似乎也没有在这个问题上实际相关,只是OP认为相关但不相关。在任何情况下,你至少应该指出这是一个迟钝的代码示例来演示…一些东西(同时解释它所演示的内容)而不是像在实际应用程序中实际使用的解决方案那样提出它