Вывод stringVar.Value
и stringVar
во втором операторе одинаковый. Я просто хочу знать, когда использовать stringVar.Value
и stringVar
.
var stringVar= dbContext.tbl.FirstOrDefault(x => x.id == id)?.ColumnName;
return stringVar!= null ? stringVar.Value : 0;
.Value является свойством типа данных, допускающего значение Nullable. Когда есть член класса, определенный с типом данных Nullable, то для получения фактического значения вы должны использовать свойство .Value
.
В вашем случае вы использовали FirstOrDefault()
с оператором Null propagation
, который будет распространять значение null, если для конкретного id
не найдено значение.
В следующей строке вы проверили, не является ли stringVar
null
, чтобы получить фактическое значение, которое вы использовали свойство .Value
, иначе верните 0
Просто обратитесь к объявлению Nullable<T>
, Value
доступно только для чтения и дает фактическое значение.
[Serializable]
[NonVersionable] // This only applies to field layout
[System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
public partial struct Nullable<T> where T : struct
{
private readonly bool hasValue; // Do not rename (binary serialization)
internal T value; // Do not rename (binary serialization) or make readonly (can be mutated in ToString, etc.)
[NonVersionable]
public Nullable(T value)
{
this.value = value;
hasValue = true;
}
public readonly bool HasValue
{
[NonVersionable]
get => hasValue;
}
public readonly T Value
{
get
{
if (!hasValue)
{
ThrowHelper.ThrowInvalidOperationException_InvalidOperation_NoValue();
}
return value;
}
}
Эта переменная явно не содержит
string
, так почему бы вам назвать ееstringVar
? Судя по вашему утверждениюreturn
, это типint?
, который является сокращением отNullable<int>
. Вам следует (уже) прочитать документацию по типуNullable<T>
.