C# 如何从对象转换为元组(ValueTuple)类型?
我使用了一个反射来获取类型为C# 如何从对象转换为元组(ValueTuple)类型?,c#,C#,我使用了一个反射来获取类型为object的返回值,但是它的实际类型是(int[],string[])我用obj.GetType().ToString()进行了双重检查,并打印了System.ValueTuple`2[System.Int32[],System.string[] 但仅使用((int[],string[])obj或(ValueTuple)obj进行强制转换将返回强制转换无效。如何正确执行此操作?好的,我终于让它工作了 可以进一步反映ValueTuple的字段ItemX。不确定是否有其
object
的返回值,但是它的实际类型是(int[],string[])
我用obj.GetType().ToString()
进行了双重检查,并打印了System.ValueTuple`2[System.Int32[],System.string[]
但仅使用
((int[],string[])obj
或(ValueTuple)obj进行强制转换将返回强制转换无效。如何正确执行此操作?好的,我终于让它工作了
可以进一步反映ValueTuple
的字段ItemX
。不确定是否有其他不那么强制的方法可以得到元组作为一个整体
using System;
namespace CTest
{
class Program
{
static void Main(string[] args)
{
Test t = new Test();
var tuple = typeof(Test).GetMethod(nameof(t.ReturnTuple)).Invoke(t, null);
int[] i = (int[])typeof((int[], string[])).GetField("Item1").GetValue(tuple);
string[] s = (string[])typeof((int[], string[])).GetField("Item2").GetValue(tuple);
foreach (int data in i)
{
Console.WriteLine(data.ToString());
}
foreach (string data in s)
{
Console.WriteLine(data);
}
// Output :
// 1
// 2
// 3
// a
// b
// c
}
}
class Test
{
public (int[], string[]) ReturnTuple() => (new int[] { 1, 2, 3 }, new string[] { "a", "b", "c" });
}
}
第一次强制转换需要一组额外的括号:((int[],string[])obj
。啊,是的,很抱歉我就是这么做的,它返回的强制转换无效。可能是您的项目针对的是不支持元组的旧C语言版本吗?为什么需要这样做?也许解释一下你想要实现的目标可以引导你找到正确的解决方案。我的意思是try:((int[],string[]))obj.Value。如果这不起作用,请尝试GetType、GetProperty和GetValue,如Heinzi的回答所示: