我有一个我试图装箱的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.
所以很明显我离开了标记。我哪里错了?拳击是正确的解决方案还是我应该看类型铸造?
答案 0 :(得分:2)
我认为拳击或演员不是你想要的。如果要将整数传递给构造函数,则应该像下面这样定义构造函数:
public CustomType(int a) {
}
或者如果你想让它成为一个对象。
public CustomType(object a) {
}
答案 1 :(得分:2)
该构造函数将CustomType
类型作为参数;你传递的是int
。 int
不是CustomType
,C#语言不知道从int
到CustomType
的隐式转换。这就是你收到错误的原因。
将int
投射到object
并不会改变它仍然不是CustomType
的事实。
查看该特定构造函数,它是一个复制构造函数。它需要一种自身作为参数。有(希望)另一个构造函数接受另一个参数,无论是int,还是其他未提及的类型,或者可能没有参数,你需要在创建默认对象后设置属性。
至于实际的解决方案,有很多。以下是一些:
CustomType
。int
添加其他构造函数
int
为参数并返回CustomObject
的函数;这将是您可以使用的“转换”功能。CustomType
的默认构造函数,并使用您的整数设置属性(可能适用也可能不适用,具体取决于CustomType
的内容。拳击似乎与手头的问题无关。这不是 用于将整数传递给自定义类型的东西。如果你想更多地了解拳击是什么,它是如何工作的,或者什么时候有用,那么考虑问一个解决这些问题的问题,因为这个特殊的问题会因使用拳击作为解决方案而受到伤害,没有帮助。
答案 2 :(得分:2)
您的构造函数看起来像Copy-constructor(复制对象)。
如果要将对象变量传递给CustomType构造函数,则语法必须为:
public CustomType(Object a)
{
//Unboxing
int value = (int) a;
}
答案 3 :(得分:0)
您应该使用显式类型转换并为此实现一些运算符。
答案 4 :(得分:0)
使用泛型。
public CustomType<T>(T a)
{
//set some variables etc
}
答案 5 :(得分:0)
您可以将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)));
答案 6 :(得分:0)
拳击是将(值的a)值类型转换为
时发生的事情int
的情况下可以是ValueType
类或object
类int
的情况下可以是IComparable
,IFormattable
,IConvertible
,IComparable<int>
或{ {1}})由于您永远不能让IEquatable<int>
拥有其他基类或实现更多接口,因此无法将int
加入int
。
如果您编写自己的CustomType
,那么 决定它实现的接口,在这种情况下,struct
的值可以装入每种接口类型中。 (但是,您无法更改struct
的基类。)
在您的类/结构struct
内, 可以定义CustomType
到int
的{{3}}。通过这种方式,说
CustomType
但这不是拳击。这只是对CustomType ct = 5;
方法的“隐形”调用。原始对象implicit operator
未放入框中;它只是运算符方法的参数。