无法将int转换为T,其中T是bool。有没有办法用C#做到这一点?

时间:2010-12-30 18:30:30

标签: c# int casting boolean

我会尝试快速,因为我已经对这个主题进行了详尽的搜索,我只找到了将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 );
}

在继续之前,有关上述不良做法的重点,以及有关稀疏矩阵的其他重点:

  1. 我一直在寻找并发现(T)(object)0不是一个好习惯,但我不明白为什么我不能在这里使用它,因为无论T是int还是double,它都能正常工作;

  2. 如果我要获取的元素不在列表this.elem上,我应该根据其他元素类型正确返回0。

  3. 因此归结为将int值(在本例中为0)转换为某个类型T,这是一个类型参数。

    有什么好办法吗?有关这种方法的任何评论吗?

    任何帮助将不胜感激!

    提前致谢!

4 个答案:

答案 0 :(得分:9)

如果(T)(object)0T,那么double 的演员阵容将不会 ...当它尝试时InvalidCastException会抛出int取消装箱doubledefault(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?