为了账号安全,请及时绑定邮箱和手机立即绑定

设置实例中的所有布尔属性

设置实例中的所有布尔属性

C#
MYYA 2022-01-09 15:39:41
我正在使用一个类,其实例用于管理各种布尔值。public bool walkable = true;public bool current = false;public bool target = false;public bool selectable = false;public bool visited = false;public Tile parent = null;public int distance = 0;还有这个重置实用功能,它将所有布尔值设置回 0public void Reset (){    walkable = false;    ...}而不是写出每个属性,我希望我可以让函数关闭任何可能属于调用它的给定实例的布尔值。在互联网上闲逛,我一直在寻找反思的东西,但据我所知,这仅在 C# 文档中引用了实际实例(不在类定义中)时才有效:// Using GetType to obtain type information:  int i = 42;  System.Type type = i.GetType();  System.Console.WriteLine(type);  是否可以根据属性从实例中关闭布尔值?想做的事是愚蠢的吗?也许我会更好地跟踪字典中的布尔值?
查看完整描述

2 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

您可以通过重新初始化外观后面的实例来支付更少的成本,而不是支付反射成本。


public class AllThoseBooleans {

    // expose values

    public bool walkable => actual.walkable;

    public bool current => actual.current;

    public bool target => actual.target;


    // real values defined here.

    private class Actuals {

        private bool walkable {get; set;}

        private bool current {get; set;}

        private bool target {get; set;}

    }


    private Actuals actual {get; set;} = new Actuals();


    // reset all values to default by initialization

    public void ResetAll() {

        actual = new Actuals();

    }

}

请注意:我没有运行它或测试访问修饰符;您可能需要调整这一点,但该理论认为:你们班布尔可以“拥有”存储可重新初始化太多太多比反射便宜。


查看完整回答
反对 回复 2022-01-09
?
万千封印

TA贡献1891条经验 获得超3个赞

您可以这样做(这里的 Test 是具有所有布尔值的类):


Test test = new Test();


FieldInfo[] fields = typeof(Test).GetFields(); // Obtain all fields

foreach (var field in fields) // Loop through fields

{

     string name = field.Name; // Get string name

     object temp = field.GetValue(test); // Get value

     if (temp is bool) // if it is a bool.

         field.SetValue(test, false);


     Console.WriteLine("name: {0} value: {1}",field.Name, field.GetValue(test));

}

输入类:


public class Test

{

public bool walkable = true;

public bool current = true;

public bool target = true;

public bool selectable = true;

public bool visited = true;

public string parent = null;

public int distance = 0;

}

输出:


name: walkable value: False

name: current value: False

name: target value: False

name: selectable value: False

name: visited value: False

name: parent value: 

name: distance value: 0


查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信