我会尽量快点,因为我已经对这个主题进行了详尽的搜索,而且我只找到与将 bool 转换为 int 相关的主题。
我构建了一个类来处理稀疏矩阵。它们可以由 double、int 或 bool 或任何其他值类型填充。
获取位置 i,j 的一些矩阵元素:
public T getElementValueAt(int i, int j)
{
int ind = this.doesElemExist(i, j);
// returns the element index if it exists, or -1
return (ind == -1 ? (T)(object)0 : this.elem[ind].value );
}
在继续之前,先强调上面的不良做法,以及其他关于稀疏矩阵的做法:
我一直在搜索并发现
(T)(object)0
不是一个好的做法,但我不明白为什么我不能在这里使用它,因为无论 T 是 int 还是 double 都有效;如果我要获取的元素不在列表
this.elem
中,我应该根据其他元素类型正确返回0。
所以它归结为将一个 int 值(在本例中为 0)转换为某个类型 T,即类型参数。
有什么好的方法吗?对此方法有何评论?
如有任何帮助,我们将不胜感激!
提前致谢!
最佳答案
你的 Actor (T)(object)0
如果 T
,将不会工作是double
...它会抛出 InvalidCastException
当它尝试拆箱时 int
至 double
.
我怀疑你实际上想要的是default(T)
, 它给出了任何 T
的默认值是 - 对于引用类型为 null,对于数字类型为零等:
return ind == -1 ? default(T) : this.elem[ind].value;
作为旁注,我鼓励您尝试坚持 .NET 命名约定,包括方法的 PascalCase。
其他三个选项:
- 使用
Nullable<T>
正如其他答案中所建议的那样 - 关注
TryXXX
返回 boolean 值以指示是否找到元素的方法,并具有out
接收值本身的参数 - 使用
TryXXX
的修改版本返回Tuple<bool, T>
的模式而不是使用out
参数
关于c# - 不能将 int 转换为 T,其中 T 是 bool。有没有办法用 C# 做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4565200/