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;
int
、long
等不是 .NET 名称 - 它们是 C# 别名(并且 .NET 面向多种语言);这意味着您需要别名和 Type
之间的特定语言映射(此处的 .NET 名称分别为 System.Int32
和 System.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);
}
我想通过名称来调用函数属性(以及类型)。
在 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;
int
、long
等不是 .NET 名称 - 它们是 C# 别名(并且 .NET 面向多种语言);这意味着您需要别名和Type
之间的特定语言映射(此处的 .NET 名称分别为System.Int32
和System.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);
}