gpt4 book ai didi

c# - 为什么我不能在 C# 中创建一个 object = bool?

转载 作者:行者123 更新时间:2023-11-30 14:12:55 35 4
gpt4 key购买 nike

我有一个程序,我正在尝试扩展对象类以允许引用数组所有成员的方法。

ExtendedArray类代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleMaze
{
class ExtendedArray : Object
{
private object[] referredTo;

public ExtendedArray()
{
referredTo = null;
}//empty constructor

public ExtendedArray(Object[] obj)
{
referredTo = obj;
}//full constructor

public void referToAll(object changeTo)
{
for (int x = 0; x < referredTo.Length; x++)
{
referredTo[x] = changeTo;
}

}//referToAll(bool)

}//ExtendedArray <== class
}

我打算在将来使用此类并向其添加内容,因此它非常通用。尽管当我尝试使用构造函数时它出错了,不能隐式地将 bool[] 类型转换为 object[] 类型。

Boolean[] dirBoolArray = { curLeft, curUp, curRight, curDown };
ExtendedArray dirBool = new ExtendedArray(dirBoolArray);

最佳答案

与您在标题中所说的相反,您可以将 bool 分配给 object 变量。以下代码编译正常:

bool b = true;
object o = b;

第二行实际做的是 boxes bool 值,将其从值类型转换为引用类型。

这意味着 b 是一个单字节,直接包含 value true。另一方面,o 是一个引用(4 或 8 个字节),它指向一个对象,该对象包含一个具有 true 值的字节,加上一些元数据。

您不能做的是将 bool[] 分配给 object[] 类型的变量。这是因为 bool[] 直接为每个 bool 包含一个字节,而 object[] 包含一个引用对于每个项目。

bool[] 转换为 object[] 将是一个相当大的变化:每个 bool 都必须单独装箱,并且一个新的必须为这些框的引用分配数组。因此,编译器不允许您直接这样做。

你可以做的是从头开始创建object[]:

object[] dirBoolArray = { curLeft, curUp, curRight, curDown };
ExtendedArray dirBool = new ExtendedArray(dirBoolArray);

这将创建一个装箱的 bool 数组,这正是您所需要的。

一些注意事项:

  • 由于您正在使用 Boolean,也许您希望 boolBoolean 之间存在一些差异(例如在 java )。在C#中两者没有区别,bool只是Boolean的别名。

  • 使用 object[] 是一种代码味道,它表示您可能做错了什么。它肯定不是 C# 中通常理解的“泛型”。

关于c# - 为什么我不能在 C# 中创建一个 object = bool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15885018/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com