我会尝试快速,因为我已经对这个主题进行了详尽的搜索,我只找到了将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,这是一个类型参数。
有什么好办法吗?有关这种方法的任何评论吗?
任何帮助将不胜感激!
提前致谢!
答案 0 :(得分:9)
如果(T)(object)0
为T
,那么double
的演员阵容将不会 ...当它尝试时InvalidCastException
会抛出int
取消装箱double
至default(T)
。
我怀疑你实际想要的是T
,它给出了return ind == -1 ? default(T) : this.elem[ind].value;
的默认值 - 对于引用类型为null,对于数字类型为零等:
Nullable<T>
作为旁注,我建议您尝试坚持.NET命名约定,包括方法的PascalCase。
其他三个选项:
TryXXX
out
方法返回布尔值以指示元素是否已找到,并且有一个TryXXX
参数来接收值本身Tuple<bool, T>
模式的修改版本,返回out
而非使用{{1}}参数答案 1 :(得分:5)
您可以使用默认值(T)。但是你也应该考虑使用可空类型。 (该函数应返回T?其中T:struct)。
答案 2 :(得分:1)
使用下一个:
Convert.ToBoolean(int);
答案 3 :(得分:1)
您是否考虑过返回默认值(T)而不是0?