foreach
での振る舞いについて質問がありC#
ます。
私のカスタム クラスは custom を実装していますGetEnumerator
。このメソッドobject
は、暗黙的に に変換可能な別のメソッドを返しますstring
。
ただし、foreach(string s in customClass)
実行時に失敗します(「タイプのオブジェクトを文字列にキャストできません..」)。
しかし、私がやるstring x = new B()
と、それは魅力のように機能します。
注: ここで達成する必要があることは特にありません。何が起こっているのかを理解したいだけです。私は、この非一般的な動作に特に興味があります。
何か案は?どのような基本的な知識が欠けていますか?
これを複製するコード:
public class A : IEnumerable
{
#region IEnumerable Members
public IEnumerator GetEnumerator()
{
yield return new B();
}
#endregion
}
public class B
{
public static implicit operator string( B b )
{
return "to-stringed implicit";
}
}
// CODE:
A a = new A();
// Works.
B b = new B();
string xxx = b;
// Doesnt work.
foreach( string str in a )
{
}