The state machine created by the yield keyword was not designed to be "detectable". If you find a way to detect it, you will have to rely on some implementation-specific hints (such as a specific pattern of the type name; some examples are given in the comments of your question), which are not part of the C# spec and, thus, might change at any time.
Thus, there is no correct way to check if an IEnumerable<T>
is generated by the yield keyword. I would argue that the correct way is not to check. That's what interfaces are for: They hide the implementation.
Since you did not mention why you want to find out whether the IEnumerable was generated by the yield keyword, I will make a wild guess and assume that what you actually wanted to ask was:
How can I materialize an IEnumerable if it has not been materialized yet?
That question has been answered already:
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…