这里的一个问题是,你必须处理多个Tuple
类型:(我假设你想这与元组工作与项目的任意数字)Tuple<T1, T2>
,Tuple<T1, T2, T3>
等
这样做,看看是否该类型的名称始于System.Tuple
的有点哈克的方式:
public static IEnumerable TupleToEnumerable(object tuple)
{
Type t = tuple.GetType();
if (t.IsGenericType && t.GetGenericTypeDefinition().FullName.StartsWith("System.Tuple"))
{
for (int i = 1;; ++i)
{
var prop = t.GetProperty("Item" + i);
if (prop == null)
yield break;
yield return prop.GetValue(tuple);
}
}
}
如果你不喜欢的FullName.StartsWith(...)
的hackyness你可以把它更加类型安全像这样:
public static IEnumerable TupleToEnumerable(object tuple)
{
Type t = tuple.GetType();
if (isTupleType(t))
{
for (int i = 1;; ++i)
{
var prop = t.GetProperty("Item" + i);
if (prop == null)
yield break;
yield return prop.GetValue(tuple);
}
}
}
private static bool isTupleType(Type type)
{
if (!type.IsGenericType)
return false;
var def = type.GetGenericTypeDefinition();
for (int i = 2;; ++i)
{
var tupleType = Type.GetType("System.Tuple`" + i);
if (tupleType == null)
return false;
if (def == tupleType)
return true;
}
}
什么是你发出 –
'VAR值= tuple.GetType()。GetProperties中(),选择(属性=> property.GetValue(元组))' – Fabio