标签: nullable

"bool"和"bool"有什么区别?

我使用"bool"类型作为变量,就像我在C++中习惯的那样,并且我尝试将我期望的函数或属性的值放入我的变量中.但是我经常遇到结果类型是"bool?"的情况.而不是"bool",隐式转换失败.

两者之间有什么区别,每次使用的时间是多少?另外,我应该使用"bool?" 作为我的变量的类型?这是最好的做法吗?

c# boolean nullable

55
推荐指数
4
解决办法
4万
查看次数

C#switch语句的默认标签如何处理可以为空的枚举?

C#switch语句的默认标签如何处理可以为空的枚举?

默认标签是否会捕获空值和任何未处理的案例?

c# null nullable switch-statement

54
推荐指数
1
解决办法
2万
查看次数

如何在c#中将null值设置为int?

int value=0;

if (value == 0)
{
    value = null;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能设置valuenull上面?

任何帮助将不胜感激.

.net c# int null nullable

53
推荐指数
3
解决办法
19万
查看次数

为什么从<T>到<U>的隐式转换运算符接受<T?>?

这是一种我无法理解的怪异行为.在我的例子我有一个类Sample<T>和隐式转换操作符TSample<T>.

private class Sample<T>
{
   public readonly T Value;

   public Sample(T value)
   {
      Value = value;
   }

   public static implicit operator Sample<T>(T value) => new Sample<T>(value);
}
Run Code Online (Sandbox Code Playgroud)

使用空值类型为出现问题时,T例如int?.

{
   int? a = 3;
   Sample<int> sampleA = a;
}
Run Code Online (Sandbox Code Playgroud)

这里是关键部分:
在我看来,这不应该编译,因为Sample<int>定义了一个转换,从intSample<int>而不是从int?Sample<int>.但它编译并成功运行!(我的意思是调用转换运算符3并将其分配给该readonly字段.)

它变得更糟.这里不调用转换运算符,sampleB将其设置为null:

{
   int? b = null;
   Sample<int> sampleB = b; …
Run Code Online (Sandbox Code Playgroud)

c# generics nullable value-type implicit-conversion

52
推荐指数
3
解决办法
3163
查看次数

类型之间有什么区别吗?和Nullable <type>?

在C#中,可以为空的原始类型(即bool?)只是它们对应Nullable<T>类型的别名,还是两者之间存在差异?

.net c# nullable

51
推荐指数
5
解决办法
4万
查看次数

C#ADO.NET:nulls和DbNull - 是否有更高效的语法?

我有一个DateTime?我正在尝试使用a插入字段DbParameter.我正在创建这样的参数:

DbParameter datePrm = updateStmt.CreateParameter();
datePrm.ParameterName = "@change_date";
Run Code Online (Sandbox Code Playgroud)

然后我想把s 的值DateTime?放到dataPrm.Valuewhile中null.

我以为我最初很聪明:

datePrm.Value = nullableDate ?? DBNull.Value;
Run Code Online (Sandbox Code Playgroud)

但是因错误而失败

接线员'??' 不能应用于'System.DateTime?'类型的操作数 和'System.DBNull'

所以我想这只有在第二个参数是第一个参数的非可空版本时才有效.那么我去了:

datePrm.Value = nullableDate.HasValue ? nullableDate.Value : DBNull.Value;
Run Code Online (Sandbox Code Playgroud)

但这也不起作用:

无法确定条件表达式的类型,因为'System.DateTime'和'System.DBNull'之间没有隐式转换

但我不想在这些类型之间进行转换!

到目前为止,我唯一可以上班的是:

if (nullableDate.HasValue)
  datePrm.Value = nullableDate.Value;
else
  datePrm.Value = DBNull.Value;
Run Code Online (Sandbox Code Playgroud)

这真的是我写这个的唯一方法吗?有没有办法使用三元运算符来实现单线程?

更新:我真的不明白为什么?? 版本不起作用.MSDN说:

?? ?? 如果左侧操作数不为null,则运算符返回左侧操作数,否则返回右侧操作数.

这正是我想要的!

Update2:最后有点明显:

datePrm.Value = nullableDate ?? (object)DBNull.Value;
Run Code Online (Sandbox Code Playgroud)

c# null ado.net dbnull nullable

48
推荐指数
4
解决办法
3万
查看次数

如何根据定义使'struct'为Nullable?

struct AccountInfo
{
   String Username;
   String Password;
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我想要一个Nullable实例,我应该写:

Nullable<AccountInfo> myAccount = null;
Run Code Online (Sandbox Code Playgroud)

但我希望struct Nullable自然而然地可以像这样使用(不使用Nullable<T>):

AccountInfo myAccount = null;
Run Code Online (Sandbox Code Playgroud)

c# struct nullable

48
推荐指数
3
解决办法
5万
查看次数

我该如何转换小数?到十进制

可能是一个简单的问题,但我尝试了所有的转换方法!它仍然有错误!你能帮我吗?

十进制?(可以为十进制)到十进制

.net c# nullable decimal type-conversion

48
推荐指数
4
解决办法
7万
查看次数

DataSet在Export中不支持System.Nullable <>

我试图使用Export to Excell,PDF,TextFile生成报告.好吧,我在MVC中这样做.我有一个名为SPBatch的类(我的SQL中存储过程的确切名称),它包含以下内容:

public string BatchNo { get; set; }
public string ProviderName { get; set; }
public Nullable<System.Int32> NoOfClaims { get; set; }
public Nullable<System.Int32> TotalNoOfClaims { get; set; }
public Nullable<System.Decimal> TotalBilled { get; set; }
public Nullable<System.Decimal> TotalInputtedBill { get; set; }
public Nullable<System.DateTime> DateCreated { get; set; }
public Nullable<System.DateTime> DateSubmitted { get; set; }
public Nullable<System.DateTime> DueDate { get; set; }
public string Status { get; set; }
public string RefNo { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# nullable dataset export-to-excel asp.net-mvc-4

47
推荐指数
2
解决办法
3万
查看次数

如何解决这个问题,以便将通用转换为Nullable <T>?

我目前使用这个方便的转换扩展方法来进行类型之间的转换:

    public static T To<T>(this IConvertible obj)
    {
        return (T)Convert.ChangeType(obj, typeof(T));
    }
Run Code Online (Sandbox Code Playgroud)

但是,它不喜欢将有效值转换为Nullable,例如,这会失败:

    "1".To<int?>();
Run Code Online (Sandbox Code Playgroud)

显然,1很容易转换为(int?),但它得到错误:

    Invalid cast from 'System.String' to 'System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'.
Run Code Online (Sandbox Code Playgroud)

这是一个明显简化的例子,实际上我用它来做字符串类型的转换,如下所示:

packageDb.Quantity = package.package.ElementDeep(Namespace + "PackageQuantity", Namespace + "ActualQuantity", Namespace + "Quantity").ValueOrNull().To<int?>();
Run Code Online (Sandbox Code Playgroud)

如果Convert.ChangeType不喜欢Nullable,那么任何人都有什么好主意吗?

c# nullable

46
推荐指数
2
解决办法
2万
查看次数