-
Notifications
You must be signed in to change notification settings - Fork 874
Expand file tree
/
Copy pathStrongBox.cs
More file actions
41 lines (34 loc) · 788 Bytes
/
StrongBox.cs
File metadata and controls
41 lines (34 loc) · 788 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System.Diagnostics.CodeAnalysis;
namespace Npgsql.Util;
abstract class StrongBox
{
private protected StrongBox() { }
public abstract bool HasValue { get; }
public abstract object? Value { get; set; }
public abstract void Clear();
}
sealed class StrongBox<T> : StrongBox
{
bool _hasValue;
[MaybeNull] T _typedValue;
[MaybeNull]
public T TypedValue {
get => _typedValue;
set
{
_hasValue = true;
_typedValue = value;
}
}
public override bool HasValue => _hasValue;
public override object? Value
{
get => TypedValue;
set => TypedValue = (T)value!;
}
public override void Clear()
{
_hasValue = false;
TypedValue = default!;
}
}