using System.Collections.Generic;
public static void Main()
var result1 = new VerificationResult(false, new ErrorInfo("error", 0));
var result2 = new VerificationResult(false, new ErrorInfo("error", 0));
bool isEqual = result1.Equals(result2);
bool contains = new List<VerificationResult> { result1 }.Contains(result2);
Console.WriteLine(isEqual);
Console.WriteLine(contains);
var error1 = new ErrorInfo("error", 0);
var error2 = new ErrorInfo("error", 0);
bool isEqual2 = error1.Equals(error2);
Console.WriteLine(isEqual2);
bool isEqual3 = VerificationResult.Success().Equals(VerificationResult.Success());
Console.WriteLine(isEqual3);
var result3 = new VerificationResult(false, new ErrorInfo("error", 0));
var result4 = result3 as VerificationResultEx;
var result5 = (VerificationResultEx)result3;
Console.WriteLine(result4);
Console.WriteLine(e.Message);
Console.WriteLine(result5);
var result6 = new VerificationResultEx(true, new ErrorInfo(), "success");
var result7 = result6 as VerificationResult;
bool isEqual4 = result6.Equals(result7);
Console.WriteLine(isEqual4);
var typeName = result1.GetType().Name;
var result8 = (VerificationResultEx)result7;
var info = result8.AdditionalInfo;
public class VerificationResult : IDisposable {
public VerificationResult(bool isValid, ErrorInfo errorInfo) {
public bool IsValid { get; private set; }
public ErrorInfo ErrorInfo { get; private set; }
public static VerificationResult Success() {
return new VerificationResult(true, new ErrorInfo());
public static VerificationResult Fail(ErrorInfo errorInfo) {
return new VerificationResult(false, errorInfo);
public static VerificationResult Fail(string errorMessage, int errorCode) {
return new VerificationResult(false, new ErrorInfo(errorMessage, errorCode));
Console.WriteLine("Dispose");
public virtual void A() {
public struct ErrorInfo {
public int Code { get; private set; }
public string Message { get; private set; }
public ErrorInfo(string message, int code): this() {
public class VerificationResultEx : VerificationResult {
public VerificationResultEx(bool isValid, ErrorInfo errorInfo, string additionalInfo):
base(isValid, errorInfo) {
AdditionalInfo = additionalInfo;
public VerificationResultEx(bool isValid, ErrorInfo errorInfo)
: base(isValid, errorInfo) {
public string AdditionalInfo { get; private set; }
public override void A() {