C# 获取访问属性

C# Get Access Properties

我想通过名称来调用函数属性(以及类型)。

在 python 中是这样的:

import time

method_to_call = getattr(time, 'clock') #  time.clock()
result = method_to_call()
print(result)

但是 C# 和类型呢? 我想在转换后的 ITEM_STRING_TO_TYPE 上使用 sizeof。在 C# 中甚至可能吗?

List<string> mainList = new List<string>(new string[]
{
    "bool",
    "byte",
    "char",
    "decimal",
    "double",
    "float",
    "int",
    "long",
    "sbyte",
    "short",
    "uint",
    "ulong",
    "ushort"
});
foreach (string item in mainList)
{
    Console.WriteLine("Size of {0} : {1}", item, sizeof(ITEM_STRING_TO_TYPE));
    // like this
    Console.WriteLine("Size of int: {0}", sizeof(int));
}

如果按ITEM_STRING_TO_TYPE,你的意思是Type,那么这里有几个问题:

  • .NET API 主要基于 .NET; intlong 等不是 .NET 名称 - 它们是 C# 别名(并且 .NET 面向多种语言);这意味着您需要别名和 Type 之间的特定语言映射(此处的 .NET 名称分别为 System.Int32System.Int64
  • sizeof 不能与Type一起使用;有 Unsafe.SizeOf<T>(),但是 不能直接与 Type 一起使用 - 它需要泛型,因此您需要通过 MakeGenericMethod[ 进行反射=37=]
  • 将它们放在一起,这真的不值得 - 你最好只对值进行硬编码;或者只使用元组数组:
List<(string name, int size)> mainList = new List<(string,int)>(new []
    {
        ("bool", sizeof(bool)), 
        // ...
        ("ushort", sizeof(ushort)), 
    });

那么你可以使用:

foreach (var item in mainList)
{
    Console.WriteLine("Size of {0} : {1}", item.name,  item.size);
}

或:

foreach ((var name, var size) in mainList)
{
    Console.WriteLine("Size of {0} : {1}", name, size);
}