作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
到目前为止,我一直能够从该网站上的现有帖子中获得答案,但今天我有一个问题似乎以前没人问过。
关于下面的一段代码:
class Board<T>
{
private T[,] board;
public T[,] BoardArray
{
get { return (T[,])board.Clone(); }
}
public T this[int y, int x]
{
get { return board[y, x]; }
set { board[y, x] = value; }
}
public Board()
{
board = new T[8, 8];
}
public void AssignToBoard()
{
board[1, 2] = 3;
this[1, 2] = 3;
}
}
问题是方法中的两行代码都产生相同的编译时错误。我知道为什么会抛出错误,但我不知道一个干净的解决方法。这是错误:
Error 1 Cannot implicitly convert type 'int' to 'T' C:\Users\Peter\Desktop\Dropbox\ReversieAI\ReversieAI\ReversieAI\Map.cs 31 18 ReversieAI
我能够编译我的代码的唯一方法是将行更改为:
board[1, 2] = (T)(object)3;
this[1, 2] = (T)(object)3;
虽然它有效,但它仍然是一个肮脏的解决方案。你们中有人认识到这个问题并可以帮助我/分享任何想法吗?
提前致谢,彼得
编辑:我找到了一个解决方案,方法是更改架构中的某些内容,删除类的通用部分。感谢您的所有反馈。我真的很感激。
最佳答案
问题似乎是在 AssignToBoard 方法中,您假设 T
是一个 int
,方法是将整数放入包含 T
的数组中>s。
我通常会期待这样的事情:
public void AssignToBoard(T value)
{
board[1, 2] = value;
this[1, 2] = value;
}
在这里,您传递的是被分配的正确类型 (T
) 的值。
然后你可以在其他地方做一些事情,比如:
var myboard = new Board<int>();
myboard.AssignToBoard(3);
另外请注意,如果 T 类似于字符串并且无法在运行时转换,则使用 (T)(object)3
的解决方案可能会在运行时失败。您实际上只是将任何问题从编译时推到运行时...
关于c# - 泛型类中的数组和索引器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11315180/
我是一名优秀的程序员,十分优秀!