コードレビュー中に関数の行を誤ってコメントアウトすると、コードに奇妙な動作が見られます。再現は非常に困難でしたが、ここでは同様の例を示します。
私はこのテストクラスを持っています:
public class Test
{
public void GetOut(out EmailAddress email)
{
try
{
Foo(email);
}
catch
{
}
}
public void Foo(EmailAddress email)
{
}
}
GetOut通常はエラーをスローする電子メールへの割り当てはありません。
コントロールが現在のメソッドを離れる前に、出力パラメーター 'email'を割り当てる必要があります
ただし、EmailAddressが別のアセンブリの構造体にある場合、エラーは発生せず、すべてが正常にコンパイルされます。
public struct EmailAddress
{
#region Constructors
public EmailAddress(string email)
: this(email, string.Empty)
{
}
public EmailAddress(string email, string name)
{
this.Email = email;
this.Name = name;
}
#endregion
#region Properties
public string Email { get; private set; }
public string Name { get; private set; }
#endregion
}
コンパイラが電子メールの割り当てを強制しないのはなぜですか?構造体が別のアセンブリで作成されている場合、このコードはコンパイルされますが、構造体が既存のアセンブリで定義されている場合はコンパイルされないのはなぜですか?
struct Dog{}、ですべて順調です。