مشاركة عبر


ca1802: استخدم القيم الحرفية الموقع المناسبة

TypeName

UseLiteralsWhereAppropriate

CheckId

ca1802

Category

Microsoft.الأداء

تعطيل تغيير

غير فاصلة

السبب

A field is declared static and readonly (Shared and ReadOnly in Visual Basic), and is initialized with a value that is computable at compile time.

وصف القاعدة

The value of a static readonly field is computed at runtime when the static constructor for the declaring type is called. If the static readonly field is initialized when it is declared and a static constructor is not declared explicitly, the compiler emits a static constructor to initialize the field.

The value of a const field is computed at compile time and stored in the metadata, which increases runtime performance when compared to a static readonly field.

نظراً لتعيين القيمة إلى الحقل الهدف هو computable في وقت يحول برمجياً، قم بتغيير التعريف إلى constالحقل حيث القيمة هو حسابها في وقت التحويل البرمجي عوضاً عن في وقت التشغيل.

كيف إلى الإصلاح انتهاكات

إلى إصلاح انتهاكا لهذه قاعدة، قم باستبدال staticو readonlyمعدلات مع constالمعدل.

عند إلى منع التحذيرات

هو الأمن لمنع ظهور تحذير من القيم بالموضع هو قاعدة، أو dهوable قاعدة الكامل، إذا كان الأداء هو ليس من الأمور.

مثال

يوضح المثال التالي نوع، UseReadOnly، التي تخالف قاعدة نوع، UseConstant، الذي يفي بقاعدة.

Imports System

Namespace PerformanceLibrary

   ' This class violates the rule.
   Public Class UseReadOnly

      Shared ReadOnly x As Integer = 3
      Shared ReadOnly y As Double = x + 2.1
      Shared ReadOnly s As String = "readonly"

   End Class

   ' This class satisfies the rule.
   Public Class UseConstant

      Const x As Integer = 3
      Const y As Double = x + 2.1
      Const s As String = "const"

   End Class

End Namespace
using System;

namespace PerformanceLibrary
{
   // This class violates the rule.
   public class UseReadOnly
   {
      static readonly int x = 3;
      static readonly double y = x + 2.1;
      static readonly string s = "readonly";
   }

   // This class satisfies the rule.
   public class UseConstant
   {
      const int x = 3;
      const double y = x + 2.1;
      const string s = "const";
   }
}