まあ、代わりにfullNameValueフィールドを次のコードに変更することができます。私はこれがあなたのエラーを解決すると思います。
fullNameValueフィールドの初期化コードがDataプロパティ(Data["FirstName"]
)を参照していますが、Dataは静的プロパティではなくインスタンスプロパティであるため、静的コンテキストでは参照できません静的フィールドを初期化するとき)。
static object _syncLock = new object();
static string _fullNameValue;
string fullNameValue
{
get
{
lock (_syncLock)
{
if (_fullNameValue == null)
{
_fullNameValue = UniqueIdGenerator.GenerateUniqueId(Convert.ToInt32(Data["FirstName"]));
}
return _fullNameValue;
}
}
}
ユニットテストの目的で使用しているようです。その場合、このコードはfullNameValueの単一の値を生成し、すべてのテストケースで再利用します。
これが必要な場合は、これで問題ありません。しかし、私はArtOfTestフレームワークに精通していませんが、さまざまなテストに異なるテストデータを使用し始めると、このコードが誤って動作することがわかります。これで問題が発生した場合は、_フルルーム値フィールドがstatic
であるかどうか再考することができます。
また、コメントで述べたように、あなたは非静的であるとfullNameValue場を作ることができ、その後、コンストラクタで初期化します。
string fullNameValue;
string companyValue;
public PricingForm()
{
fullNameValue = UniqueIdGenerator.GenerateUniqueId(Convert.ToInt32(Data["FirstName"]));
companyValue = // code to initialize company value
}
さらに別の代替:以下のコードであるあなたがプロパティにfullNameValueフィールドを変換しようとする場合があります。ここでも、これは上記の例とは異なる動作を生成する可能性があります。入力パラメータが同じ場合でも、GenerateUniqueIdを呼び出すたびに異なる値が返されますか?それは、このプロパティにアクセスするたびに別の値を返すことを意味するので、これがあなたが望むものかどうかを検討してください。コメント欄での議論を踏まえて
string fullNameValue
{
get { return UniqueIdGenerator.GenerateUniqueId(Convert.ToInt32(this.Data["FirstName"])); }
}
、私の提案は、以下のようなアプローチを使用することです。
これは、_fullNameValueフィールド(BaseWebAiiTestクラスのDataプロパティがコンストラクタの実行時に初期化されていないために必要です)の遅延初期化を実行します。私はロッキングコードを省略しました。なぜなら、それは必要ではないかもしれないし、OPはそれの冗長について懸念を表明したからです。
string _fullNameValue;
string fullNameValue
{
get
{
if (_fullNameValue == null)
_fullNameValue = UniqueIdGenerator.GenerateUniqueId(Convert.ToInt32(this.Data["FirstName"]));
return _fullNameValue;
}
}
これはエラーの原因となるコードではありません。 –
多分私はここで何かを見逃していますが、あなたが得るエラーは 'Data'プロパティを参照しています。そのプロパティからコードを投稿します。 – MusiGenesis
パブリックBaseWebAiiTest.TestDataデータ{get; } – algot