首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C#中有类似Python的getattr()吗?

在C#中,没有与Python的getattr()完全相同的功能。但是,您可以使用反射来实现类似的效果。以下是一个示例:

代码语言:csharp
复制
using System;

public class Example
{
    public string Property1 { get; set; }
    public int Property2 { get; set; }

    public static void Main()
    {
        Example example = new Example();
        example.Property1 = "Hello, World!";
        example.Property2 = 42;

        string propertyName = "Property1";
        object value = GetPropertyValue(example, propertyName);
        Console.WriteLine($"The value of {propertyName} is: {value}");

        propertyName = "Property2";
        value = GetPropertyValue(example, propertyName);
        Console.WriteLine($"The value of {propertyName} is: {value}");
    }

    public static object GetPropertyValue(object obj, string propertyName)
    {
        Type type = obj.GetType();
        System.Reflection.PropertyInfo propertyInfo = type.GetProperty(propertyName);
        if (propertyInfo == null)
        {
            throw new ArgumentException($"The property {propertyName} does not exist on {type.Name}");
        }

        return propertyInfo.GetValue(obj);
    }
}

在这个示例中,我们定义了一个名为Example的类,该类具有两个属性:Property1(字符串类型)和Property2(整数类型)。我们还定义了一个名为GetPropertyValue的方法,该方法接受一个对象和一个属性名称,并使用反射来获取该属性的值。

Main方法中,我们创建了一个Example对象,并设置了它的属性值。然后,我们使用GetPropertyValue方法来获取这些属性的值,并将它们打印到控制台上。

请注意,这个示例仅适用于公共属性。如果您需要访问私有属性,您需要修改GetPropertyValue方法以使用BindingFlags参数,以便在需要时允许非公共属性的访问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python Python中的反射机制

概念 借用java中的定义:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性 module2.py #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'shouke' class TestClass: def __init__(self): pass def fun(self): pass module1.py 1、不导入模块 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'shouke' if __name__ == '__main__': print(globals()) 运行结果 运行结果: {'__author__': 'shouke', '__loader__': <_frozen_importlib.SourceFileLoader object at 0x01F5C310>, '__name__': '__main__', '__builtins__': , '__package__': None, '__doc__': None, '__cached__': None, '__file__': 'F:/project/interface_project/module1.py'} 说明:globals函数返回一个map,map中的key是全局范围内对象的名字,value是该对象的实例 2、导入模块 修改module1.py代码如下 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'shouke' import sys if __name__ == '__main__': print(globals()) 运行结果: {'__loader__': <_frozen_importlib.SourceFileLoader object at 0x01D9C310>, 'sys': , '__package__': None, '__builtins__': , '__author__': 'shouke', '__name__': '__main__', '__doc__': None, '__file__': 'F:/project/interface_project/module1.py', '__cached__': None} 如上,新增了带颜色部分的内容 3.导入类 修改module1.py代码如下 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'shouke' from module2 import TestClass if __name__ == '__main__': print(globals()) 输出结果: {'TestClass': , '__package__': None, '__doc__': None, '__file__': 'F:/project/interface_project/module1.py', '__cached__': None, '__builtins__': , '__loader__': <_frozen_importlib.SourceFileLoader object at 0x01DFC310>, '__author__': 'shouke', '__name__': '__main__'} 如上,新增了带颜色部分的内容 4、结合getattr,callable函数 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'shouke' from module2 import TestClass if __name__ == '__main__': # 动态获取类 print('动态获取类:%s'% globals()['TestClass']) print('\n') # 获取类的属性和函数 print(dir(TestClass)) print('\n') print(getattr(TestClass,'fun')) # 获取类的函数对象 print(getattr(globals()['TestClass'](),'attr')) # 获取类实例的属性对象print('\n') print(callable(getattr(TestClass,'fun'))) # 查看类的函数对象是否

01

Python运算符重载

在Python语言中提供了类似于C++的运算符重在功能: 一下为Python运算符重在调用的方法如下: Method        Overloads        Call for __init__        构造函数        X=Class() __del__        析构函数        对象销毁 __add__        +                X+Y,X+=Y __or__        |                X|Y,X|=Y __repr__        打印转换        print X,repr(X) __str__        打印转换        print X,str(X) __call__        调用函数        X() __getattr_    限制            X.undefine __setattr__    取值            X.any=value __getitem__    索引            X[key],                             For If __len__        长度            len(X) __cmp__        比较            X==Y,X<Y __lt__        小于            X<Y __eq__        等于            X=Y __radd__        Right-Side +        +X __iadd__        +=                X+=Y __iter__        迭代            For In 7.1    减法重载

01
领券