Ошибка с расширением округления до десятичного числа - невозможно получить доступ с ссылкой на экземпляр; вместо этого укажите имя типа - PullRequest
8 голосов
/ 12 августа 2011

Я использовал методы расширения несколько раз и не сталкивался с этой проблемой. У кого-нибудь есть идеи, почему это приводит к ошибке?

 /// <summary>
 /// Rounds the specified value.
 /// </summary>
 /// <param name="value">The value.</param>
 /// <param name="decimals">The decimals.</param>
 /// <returns></returns>
 public static decimal Round (this decimal value, int decimals)
 {
     return Math.Round(value, decimals);
 }

Использование:

decimal newAmount = decimal.Parse("3.33333333333434343434");
this.rtbAmount.Text = newAmount.Round(3).ToString();

newAmount.Round (3) выдает ошибку компилятора:

Error   1   Member 'decimal.Round(decimal)' cannot be accessed with an instance     reference; qualify it with a type name instead

Ответы [ 2 ]

8 голосов
/ 12 августа 2011

Конфликт здесь является конфликтом между вашим методом расширения и decimal.Round.Простейшее исправление, как уже было обнаружено, заключается в использовании другого имени.Методы типа всегда имеют приоритет над методами расширения, даже до точки конфликта с static методами.

2 голосов
/ 12 августа 2011

Извините, что так быстро ответил на мой вопрос.Через секунду после публикации я понял, что, возможно, компилятору не нравится «Round» в качестве названия.Поэтому я изменил его на «RoundNew», и это сработало.Думаю, что-то вроде конфликта имен ... '

Больше ошибок нет:

/// <summary>
/// Rounds the specified value.
/// </summary>
/// <param name="value">The value.</param>
/// <param name="decimals">The decimals.</param>
/// <returns></returns>
public static decimal RoundNew (this decimal value, int decimals)
{
    return Math.Round(value, decimals);
}

decimal newAmount = decimal.Parse("3.33333333333434343434");
this.rtbAmount.Text = newAmount.RoundNew(3).ToString();
...