首页 > 编程语言 >C# 匿名对象、动态属性

C# 匿名对象、动态属性

时间:2024-09-30 17:50:11浏览次数:7  
标签:obj C# private 匿名 static arg var dyObj 属性

以下代码基于 Unity, 放置在 Editor文件夹下

#if UNITY_EDITOR

using UnityEditor;
using UnityEngine;

public class EditorTest : Editor {

    [MenuItem("Tools/EditorTest", true)]
    private static bool ValidateMenuItem() {
        return !EditorApplication.isPlaying;
    }

    [MenuItem("Tools/EditorTest")]
    private static void Test() {
        if (EditorApplication.isPlaying) return;
        Debug.Log("== Tools/EditorTest ==");

        // 匿名对象
        var obj = new { a = 1, b = 2 };
        GetProps(obj);

        // 动态属性,使用 System.Dynamic.ExpandoObject 类实现
        dynamic dyObj = new System.Dynamic.ExpandoObject();
        dyObj.a = 3;
        dyObj.b = 4;
        GetDyProps(dyObj);

    }

    private static T CastAnonymous<T>(object anonymous, T anonymousType) {
        return (T)anonymous;
    }

    private static void GetProps(object arg) {
        // 利用泛型特性访问属性
        var obj = CastAnonymous(arg, new { a = 0, b = 0 });
        Debug.Log($"obj.a:{obj.a}, obj.b:{obj.b}"); // output: obj.a:1, obj.b:2

        // 利用反射机制访问属性
        var argType = arg.GetType();
        var a = argType.GetProperty("a").GetValue(arg);
        var b = argType.GetProperty("b").GetValue(arg);
        Debug.Log($"a:{obj.a}, b:{obj.b}"); // output: a:1, b:2
    }

    private static void GetDyProps(dynamic dyObj) {
        Debug.Log($"dyObj.a:{dyObj.a}, dyObj.b:{dyObj.b}"); // output: dyObj.a:3, dyObj.b:4
    }

}
#endif

标签:obj,C#,private,匿名,static,arg,var,dyObj,属性
From: https://www.cnblogs.com/kingBook/p/18442269

相关文章

  • PICO 2 RP2350使用官方推荐RISC-V编译器在O3优化下的coremark跑分,与Hazard3库宣传跑分
    编译环境:WSLUbuntu22.04GCC13.2.0 Hazard3存储库https://github.com/Wren6991/Hazard3/RP2350默认频率150MHz,编译内核为其RISC-V架构内核,在此频率下实测O3等级跑分453左右,O2等级跑分429左右。在测试时,当我打开第二个核心后,并且第二个核心只用来控制led灯,此时coremark跑......
  • 【JPCS独立出版】第四届机电一体化技术与航空航天工程国际学术会议(ICMTAE 2024)
    第四届机电一体化技术与航空航天工程国际学术会议(ICMTAE2024)20244th InternationalConferenceon MechatronicsTechnologyandAerospaceEngineering大会时间:2024年11月8-10日大会地点:中国-南昌大会官网:http://www.ic-icsm.com/【论文投稿】收录检索:EI和Scopus......
  • 【EI检索】第五届先进材料与智能制造国际学术会议(ICAMIM 2024)
    第五届先进材料与智能制造国际学术会议(ICAMIM2024)20245th InternationalConferenceonAdvancedMaterialsandIntelligentManufacturing大会时间:2024年11月01日-03日大会地点:广州大会官网:http://www.ic-icsm.com/【论文投稿】收录检索:EI +Scopus主办单位:广......
  • 【IEEE出版】第四届新能源与电力工程国际学术会议(ICNEPE 2024)
    第四届新能源与电力工程国际学术会议(ICNEPE2024)20244th InternationalConferenceonNewEnergyandPowerEngineering大会时间:2024年11月8-10日大会地点: 中国-广州大会官网:http://www.ic-icsm.com/【论文投稿】收录检索:EICompendex、Scopus主办单位:华南理工大学......
  • 【IEEE出版】第四届智能电力与系统国际学术会议(ICIPS 2024)
    第四届智能电力与系统国际学术会议(ICIPS2024) 澳大利亚会场(11月1-3日) 地点:珀斯|澳大利亚中国会场:(12月6-8日) 地点:湖北宜昌|中国 三峡大学大会官网:http://www.ic-icsm.com/【论文投稿】 主办单位:三峡大学(中国分场)、MurdochUniversity(澳大利亚分场)论文出版:......
  • 第四章 CSS样式基础
    4.1CSS概述随着HTML的发展,为了满足页面设计者的要求,HTML添加了很多显示功能,但是随着这些功能的增加,使得HTML变得越来越杂乱,HTML页面也越来越臃肿,CSS便诞生了。CSS是用于简化HTML标签,把关于样式部分的内容提取出来,进行单独地控制,使结构与样式分离式开发。对页面布局等的控制......
  • 解决 PbootCMS 后台 Ueditor 编辑器中单图片上传按钮无反应及多图片上传提示“后台配
    按照以下步骤进行修改:打开相关文件打开PbootCMS程序目录下的 core/extend/ueditor/php/controller.php 文件。修改时间区域配置将第四行的注释去掉,并将时间区域名称修改为首字母大写的形式。具体步骤打开相关文件使用文本编辑器(如Notepad++、VSCode等)打......
  • pbootcms模板后台编辑器无法上传图片提示:后端配置项没有正常加载,上传插件不能正常使用
    当你在使用PbootCMS后台时,遇到Ueditor编辑器中的单图片上传按钮无反应,多图片上传提示“后台配置项返回格式出错,上传功能将不能正常使用!”的问题时,可以通过以下步骤来解决。问题分析该问题通常是由于时间区域配置不正确导致的。具体来说,Linux系统对时间区域的大小写非常敏感......
  • 确保 PbootCMS 网站能够正常运行,并且成功安装和授权模板
    准备PHP环境确认PHP版本使用命令行或SSH登录服务器,运行以下命令检查PHP版本:sh php-v确认版本为5.3+。上传PbootCMS文件使用FTP客户端使用FTP客户端(如FileZilla、WinSCP等)连接到服务器。将PbootCMS的所有文件上传到服务器的根目录(通常......
  • PbootCMS模板安装与授权方法
    为了确保PbootCMS网站能够正常运行,并且安装和授权模板,以下是详细的步骤说明:步骤1:部署PbootCMS准备PHP环境确保服务器支持PHP5.3+版本。如果使用的是虚拟主机,确认其支持PHP5.3+版本。上传PbootCMS文件将PbootCMS的所有文件通过FTP上传到服务器的根......