-2
私はクラスCustomerを持っており、Customerクラスを変更せずに異なるフォーマットを作成する必要があります。私はこのためにCustomerFormatProviderを作成しました。 Customer.Format()が呼び出されると、CustomFormatProvider.Formatは無視されます。なぜ ??? 助けてください!!!!なぜフォーマットが機能しないのですか?
public class Customer
{
private string name;
private decimal revenue;
private string contactPhone;
public string Name { get; set; }
public decimal Revenue { get; set; }
public string ContactPhone { get; set; }
public string Format(string format)
{
CustomerFormatProvider formatProvider = new CustomerFormatProvider();
return string.Format(formatProvider, format, this);
}
}
public class CustomerFormatProvider : ICustomFormatter, IFormatProvider
{
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
return this;
return null;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
Customer customer = (Customer) arg;
StringBuilder str = new StringBuilder();
str.Append("Customer record:");
if (format.Contains("N"))
{
str.Append(" " + customer.Name);
}
if (format.Contains("R"))
{
str.Append($"{customer.Revenue:C}");
}
if (format.Contains("C"))
{
str.Append(" " + customer.ContactPhone);
}
return str.ToString();
}
}
質問が不明なので投票を停止してください。あなたは、 'CustomerFormatProvider'クラスのFormatメソッドへの呼び出しを持っていないようです。それでは、プログラムの実行中にその関数が無視されているとはどういう意味でしょうか? – ViVi
@ViVi、それはフォーマットプロバイダです。 'Format'メソッドの直接呼び出しはありません。 @Pavelは、 'Customer.Format()'を呼び出している間、エラーに直面していると述べています。彼は呼び出しコードについて言及する必要がありますが、あなたのdownvoteの背後にある仮定はおそらく間違っていました。 – Ash