gpt4 book ai didi

c# - 泛型类中的数组和索引器

转载 作者:行者123 更新时间:2023-11-30 21:06:15 24 4
gpt4 key购买 nike

到目前为止,我一直能够从该网站上的现有帖子中获得答案,但今天我有一个问题似乎以前没人问过。

关于下面的一段代码:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com