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

标签 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。

所以它归结为将一个 int 值(在本例中为 0)转换为某个类型 T,即类型参数。

有什么好的方法吗?对此方法有何评论?

如有任何帮助,我们将不胜感激!

提前致谢!

最佳答案

你的 Actor (T)(object)0如果 T将不会工作是double ...它会抛出 InvalidCastException当它尝试拆箱时 intdouble .

我怀疑你实际上想要的是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/

相关文章:

c - 当我们进行结构类型转换时,到底发生了什么?

c# - 将垂直行转换为水平数据表

c# - 用 C# 计算当前月份的上一季度

c# - 创建一个在 ASP.NET 中自行执行的页面

java - 如何将用户输入的整数发送到 Java 中的链表?

Python在一行中分配两个变量

c# - 如何处理 U-SQL EXTRACT 语句中丢失的文件?

swift - 从 String 转换大 Int

c - 如何在 C 中取消引用和自动递增强制转换指针?

c++ - 如果我将 double 转换为 int,但 double 的值超出范围会怎样?