I have a use case where I need to check if a value is a C# 7 ValueTuple, and if so, loop through each of the items. I tried checking with obj is ValueTuple
and obj is (object, object)
but both of those return false. I found that I could use obj.GetType().Name
and check if it starts with "ValueTuple"
but that seems lame to me. Any alternatives would be welcomed.
I also have the issue of getting each item. I attempted to get Item1
with the solution found here: How do I check if a property exists on a dynamic anonymous type in c#? but ((dynamic)obj).GetType().GetProperty("Item1")
returns null. My hope was that I could then do a while
to get each item. But this does not work. How can I get each item?
Update - more code
if (item is ValueTuple) //this does not work, but I can do a GetType and check the name
{
object tupleValue;
int nth = 1;
while ((tupleValue = ((dynamic)item).GetType().GetProperty($"Item{nth}")) != null && //this does not work
nth <= 8)
{
nth++;
//Do stuff
}
}
((dynamic)item).GetType().GetProperties()
returns an empty array... :( – NonresistanceItem1
Item2
etc are not properties - they are fields. So you have to doGetType().GetField("Item1")...
. Casting to dynamic is not needed. – Glasscockwhere T : struct
. – Hypozeugma