C#-无法将int强制转换为b

我面临的问题是,在我的情况下,C#无法将数字1转换为bool。 在我的情况下(bool)intValue无法正常工作。 我收到InvalidCastException。我知道我可以使用Convert.ToBoolean(...),但我只是想知道它不起作用。 有什么解释吗?

我的代码是

if (actualValueType.Name == "Boolean" || setValueType.Name == "Boolean")
{
   if ((bool)actualValue != (bool)setValue)
   ...
}
theknut asked 2020-02-13T16:11:00Z
11个解决方案
55 votes

无需强制转换:

bool result = intValue == 1;

从文档:

包含bool使得编写自文档代码更容易

布尔值是true还是false

1.2.1预定义类型(C#)

Ritch Melton answered 2020-02-13T16:12:15Z
40 votes

switchbreak不能隐式转换(例如,与C ++相反)。

这是语言设计者的有意识决定,目的是为了在条件中使用数字时,避免代码出错。 条件需要显式采用switch值。

不能写:

int foo = 10;

if(foo) {
  // Do something
}

想象一下,如果开发人员想将foo与20进行比较,却错过了一个等号:

if(foo = 20) {
  // Do something
}

上面的代码可以编译和运行-副作用可能不是很明显。

switch进行了类似的改进:您不能从一种情况变为另一种情况-您需要显式的breakreturn

Jakub Konecki answered 2020-02-13T16:11:38Z
36 votes
bool b = Convert.ToBoolean(0);

将0和null转换为false,将其他任何转换为true。

kravits88 answered 2020-02-13T16:12:36Z
1 votes

“在其他语言中,false等于0,true等于1,但这在C#语言中是不可能的。”

我必须承认我以为假为零,而真为!假....

int fred = 2;

if (fred == true)
{
    printf("fred is true");
}

肯定会打印弗雷德是真的

Dave answered 2020-02-13T16:13:05Z
0 votes

在其他语言中,false等于0,true等于1,但这在C#语言中是不可能的。

Jacob Seleznev answered 2020-02-13T16:13:25Z
0 votes

在C#中,bool实际上是intValue == 0结构,因此它不仅在内部表示为1或0。 语言的创建者似乎在整个语言上都采用了显式而非隐式的方法。 要完成您要执行的操作(有效地将1强制转换为intValue == 0,将0强制转换为false),请执行以下操作:

if (intValue == 1) {
    // do something
} else if (intValue == 0) {
    // do something else
} else {
    // invalid bool
}

您还可以删除last else子句,并执行典型的C语言操作,使intValue == 0等效于false,其他则是true

FishBasketGordo answered 2020-02-13T16:13:50Z
0 votes

可能在这里重复其他人,但是您不能将int转换为bool,因为int不是bool。 它是一个int。 谁曾想到? ;-)

您需要根据您的int值创建一个新的布尔值,并且已经发布的“ myvar!= 0”似乎足够好。

另外,您在哪里得到例外? 运行以下代码肯定会产生编译器错误:

int myIntValue = 0;
bool myBoolValue = (bool)myIntValue;

您必须做一些未在问题中显示的常规内容。

UrbanEsc answered 2020-02-13T16:14:25Z
0 votes

如果您想将两个值变量强制转换为bool,如var,它持有(1和2并想为false返回1,为true返回2),我建议:

//in the end of method or something :
return w == 2;
Hany Hassan answered 2020-02-13T16:14:45Z
0 votes

您可以像下面那样使用三元运算符,而不是强制转换。     bool b = true;     int i = 1;

// bool to int
i = b == true ? 1 : 0;
// int to bool
b = i > 0 ? true : false;
Muflix answered 2020-02-13T16:15:05Z
0 votes

如果您只需要在if (foo != 0)中键入Convert.ToBoolean(foo),则可以为int类型创建扩展方法,并执行if (foo.IsNonZero())之类的操作。

如果C#允许扩展属性,则您可以编写没有括号的Convert.ToBoolean(foo),我认为这比原始的if (foo != 0)读起来更清楚,但遗憾的是,当前情况并非如此。

不过,您最好还是选择以前建议的Convert.ToBoolean(foo)来更好。

Dhi answered 2020-02-13T16:15:35Z
0 votes

我正在为研究目的进行寻路。 我需要随机地将某些节点阻止为可行走/已阻止。

这是我想到的一个简单解决方案:

int block = Random.Range(0, 10) + 1;
node.blocked = (block % 2 == 0) ? true : false;
Artorias2718 answered 2020-02-13T16:16:00Z
translate from https://stackoverflow.com:/questions/6571312/cant-cast-int-to-bool