C#でプロパティを一度だけ設定する方法はありますか?
2023-08-02 06:32:27
質問
C#オブジェクトのプロパティを一度だけ設定できるようにする方法を探しています。これを行うためのコードを書くのは簡単ですが、もし存在するならば、私はむしろ標準的なメカニズムを使用したいと思います。
public OneShot<int> SetOnceProperty { get; set; }.
私が実現したいことは、プロパティがまだ設定されていない場合は設定できますが、以前に設定されていた場合は例外を投げるということです。Nullable値のように機能し、設定されているかどうかを確認することができる必要があります。
どのように解決するのですか?
.NET 4.0 の TPL で直接サポートされています。
(編集: 上記の文章は
System.Threading.WriteOnce<T>
は、当時利用可能だった "preview" ビットに存在しましたが、これは TPL が RTM/GA になる前に消滅したようです)
私の記憶では、それは多くの行ではありません......。
のようなものです。
public sealed class WriteOnce<T>
{
private T value;
private bool hasValue;
public override string ToString()
{
return hasValue ? Convert.ToString(value) : "";
}
public T Value
{
get
{
if (!hasValue) throw new InvalidOperationException("Value not set");
return value;
}
set
{
if (hasValue) throw new InvalidOperationException("Value already set");
this.value = value;
this.hasValue = true;
}
}
public T ValueOrDefault { get { return value; } }
public static implicit operator T(WriteOnce<T> value) { return value.Value; }
}
では、例えば
readonly WriteOnce<string> name = new WriteOnce<string>();
public WriteOnce<string> Name { get { return name; } }
関連
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み] WPFのTextBlockで自動縦スクロールバー?
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] 特定のプロパティに対するLINQのDistinct()
-
[解決済み] C#で文字を繰り返し表示する最適な方法
-
[解決済み] ファイルが使用中であるかどうかを確認する方法はありますか?
-
[解決済み] LINQを使用して、プロパティ値の最小または最大値を持つオブジェクトを選択する方法
-
[解決済み】C#で例外をキャッチして再スローする理由とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み] wcf サービスのコンストラクタに値を渡すにはどうすればよいですか?