• C#如何批量创建类


      有时候我们会遇到创建大量子类的情况,这些子类基本代码类似,这个时候我们就可以用工具来批量创建。

      比如我要创建以下格式的类:

    1. private class HeartbeatSend
    2. {
    3. public string checkpointAuto;
    4. public string checkpointId;
    5. public string chipDate;
    6. public string flag;
    7. public string gold;
    8. public string mapDate;
    9. public string resinMark;
    10. public string scienceDate;
    11. public string sign;
    12. public string GetSign()
    13. {
    14. var _dic = new Dictionary<string, string>();
    15. _dic.Add("checkpointAuto", checkpointAuto);
    16. _dic.Add("checkpointId", checkpointId);
    17. _dic.Add("chipDate", chipDate);
    18. _dic.Add("flag", flag);
    19. _dic.Add("gold", gold);
    20. _dic.Add("mapDate", mapDate);
    21. _dic.Add("resinMark", resinMark);
    22. _dic.Add("scienceDate", scienceDate);
    23. return HttpClient.Inst.GetSign(_dic);
    24. }
    25. }

      这是个心跳类,里面包含了用到的数据及一个解析方法。如果每个接口都写一遍就太麻烦了,我们可以用到如下工具脚本。

    1. using System.IO;
    2. using UnityEditor;
    3. using UnityEngine;
    4. using System;
    5. using System.Collections.Generic;
    6. public class NewBehaviourScript : MonoBehaviour
    7. {
    8. public List<string> allHead = new List<string>();
    9. public string Name;
    10. private void Start()
    11. {
    12. string _str = "";
    13. _str += "private class " + Name + "\n" + "{\n";
    14. foreach (var idx in allHead)
    15. {
    16. _str += "public string " + idx + ";\n";
    17. }
    18. _str += "public string GetSign()\n{\nvar _dic = new Dictionary();\n";
    19. foreach (var idx in allHead)
    20. {
    21. if (idx != "sign")
    22. _str += "_dic.Add(\"" + idx + "\"," + idx + ");\n";
    23. }
    24. _str += "return HttpClient.Inst.GetSign(_dic);\n}\n}";
    25. StringToTxt("Scenes", Name, _str);
    26. }
    27. ///
    28. /// 将字符串存储为txt文本
    29. ///
    30. /// 路径
    31. /// 文本名称
    32. /// 将要存储的字符串
    33. ///
    34. public void StringToTxt(string _path, string _name, string _str)
    35. {
    36. Debug.Log("开始存储数据");
    37. AssetDatabase.Refresh();
    38. Directory.CreateDirectory(_path);
    39. using (StreamWriter writer = File.CreateText(_path + "/" + _name + ".cs"))
    40. {
    41. writer.Write(_str);
    42. }
    43. AssetDatabase.Refresh();
    44. //Debug.Log(gameObject.name + "转表完毕");
    45. }
    46. }

      拖到物体上,运行即可创建。

      如果有其它格式的,可以自己改改。

      关于错误处理:

      通常由于弱网或者无网络情况下,会出现断网的情况,这个时候可以给post和get再封装一层,用于断网的连接。比如:

    1. public int Post(string _str, string url, out string _reslut, Action _callback, Action _errorAc)
    2. {
    3. var _state = HttpPost(url + _module + "/" + _key, _str, out _reslut);
    4. if (_state == -1) _errorAc();
    5. else _callback();
    6. return _state;
    7. }

      利用事件来处理错误的方法:

    1. private Action netAction;
    2. public void SetNetAction(Action _ac) { netAction = null; netAction = _ac; }
    3. public void GetNetAction() { netAction?.Invoke(); }

      在错误回调或者返回结果失败的时候,可以将当前方法存储下来,然后打开网络连接失败界面。示例:

      这样就能在合适的时机重新调用该接口。 

  • 相关阅读:
    本地生活服务正在借助小程序迎战增量市场
    怎么批量保存网页图片-快速批量保存网页的方法
    Lock锁以及解决生产者消费者的方案
    Linux入门学习16
    role、user、schema在Oracle、MySQL、PostgreSQL的区别
    java替换jar中的class文件
    Python3操作redis百万级数据迁移,单机到单机,集群到集群
    【电源专题】什么是AC/DC转换器
    【拖拖拖没烦恼;难难难睡不着】22届错过校招未就业|什么是校招?二本进不去大厂,校招不重要?
    PMP通过率暴跌,是否跟新大纲有关?
  • 原文地址:https://blog.csdn.net/Tel17610887670/article/details/126380209