【发布时间】:2012-11-06 00:22:03
【问题描述】:
我创建了一个泛型类型来充当指针,以便我可以通过引用传递。 (也许有一种更简单的方法可以做到这一点,但我想强调我这样做是为了更多地了解泛型和通过引用传递,如果这有意义的话,这不是完成任务的最有效方式。)
这是我为泛型类型编写的代码
class GenericPointer<T> {
public T item;
public void setItem(T i){ item = i; }
public T getItem(){ return item; }
}
在我的程序中,我创建了一个名为“intPointer”的此类实例。值 143 是任意的。
GenericPointer<int> intPointer = new GenericPointer<int>();
intPointer.setItem(143);
Console.WriteLine(intPointer.getItem());
以上代码运行正常,设置并返回值143。
我现在想将这个“intPointer”传递给一个增加它的方法,然后再次打印该值。
所以我写了一个叫addone()的方法
public void addone(int i) { i ++; }
现在我想进行以下调用(记住我已经将值设置为 143):
Console.WriteLine(intPointer.getItem());
addone(intPointer);
Console.WriteLine(intPointer.getItem());
我期望看到的是 143,然后是 144,但是我收到以下错误:
The best overloaded method match for 'Notes.Program.addone(int)' has some invalid arguments
和:
cannot convert from 'Notes.GenericPointer<int>' to 'int'
任何帮助将不胜感激!
【问题讨论】:
-
这个问题太宽泛了...正确的答案需要对大量 C# 的完整解释...
-
为什么不简单地使用 ref 关键字呢? msdn.microsoft.com/en-us/library/14akc2c7.aspx 这里也是一个很好的答案:stackoverflow.com/a/3539299/578843。
-
@MiMo 我想我在这里对我的问题给出了一个非常具体的解释。这个网站是为了学习和解决问题而存在的。没有人强迫你阅读或居高临下。我不需要有人握住我的手,只要朝着正确的方向推动即可。幸运的是,还有其他人愿意提供帮助。如果你没有什么可说的,那就帮别人一个忙,把你的 cmets 留给自己。