gpt4 book ai didi

c# - 如何自动将从 FieldInfo.GetValue 获得的值转换为正确的类型?

转载 作者:太空宇宙 更新时间:2023-11-03 19:27:52 25 4
gpt4 key购买 nike

如果我有一堆 FieldInfo 的实例,并且我已经知道它们的 FieldType 是可以传递给 BinaryWriter.Write 的类型之一(...),我如何自动将给定对象的字段传递给 BinaryWriter.Write(...) 而无需针对 FieldType 进行测试类型集并手动转换为匹配类型?

例如我如何避免必须执行以下操作:

object value = fieldInfo.GetValue(foo);
if (fieldInfo.FieldType == typeof(int))
{
binaryWriter.Write((int)value);
}
// followed by an `else if` for each other type.

更新:

应该说,我想针对 .NET 2.0 执行此操作,最好不使用 C# 3.0 中没有的任何内容。

最佳答案

如果您使用的是 C# 4,最简单的方法是使用动态类型并让它解决问题:

dynamic value = fieldInfo.GetValue(foo);
binaryWriter.Write(value);

假设您总是只想调用 binaryWriter.Write 的重载。另一种选择是使用从值类型到“如何处理它”的字典:

static readonly Dictionary<Type, Action<object, BinaryWriter>> Actions = 
new Dictionary<Type, Action<object, BinaryWriter>>
{
{ typeof(int), (value, writer) => writer.Write((int) value) },
{ typeof(string), (value, writer) => writer.Write((string) value) },
// etc
};

然后:

object value = fieldInfo.GetValue(foo);
Actions[value.GetType()](value, binaryWriter);

关于c# - 如何自动将从 FieldInfo.GetValue 获得的值转换为正确的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7230468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com