我想用它的名字调用函数属性(也是类型)。
在python中,这是这样的:
import time
method_to_call = getattr(time, 'clock') # time.clock()
result = method_to_call()
print(result)
但是C#和类型呢?我想在转换的sizeof
上使用ITEM_STRING_TO_TYPE
。它甚至可以在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
,那么这里有一些问题:
int
,long
等不是.NET名称 - 它们是C#别名(而.NET目标是多种语言);这意味着你需要在别名和Type
之间使用特定于语言的地图(这里的.NET名称分别是System.Int32
和System.Int64
)sizeof
不能与Type
一起使用;有Unsafe.SizeOf<T>()
,但也不能直接用Type
- 它需要泛型,所以你需要通过MakeGenericMethod
反思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);
}