相关疑难解决方法(0)

为什么我们需要在C#中装箱和拆箱?

为什么我们需要在C#中装箱和拆箱?

我知道拳击和拆箱是什么,但我无法理解它的实际用途.我应该在哪里以及在哪里使用它?

short s = 25;

object objshort = s;  //Boxing

short anothershort = (short)objshort;  //Unboxing
Run Code Online (Sandbox Code Playgroud)

.net c# boxing

307
推荐指数
6
解决办法
13万
查看次数

可空类型:在c#中检查null或0的最佳方法

我正在开展一个项目,我发现我正在许多地方检查以下内容:

if(item.Rate == 0 || item.Rate == null) { }
Run Code Online (Sandbox Code Playgroud)

更像是一种奇怪而不是什么,检查这两种情况的最佳方法是什么?

我添加了一个辅助方法,它是:

public static bool nz(object obj)
{
    var parsedInt = 0;
    var parsed = int.TryParse(obj.ToString(), out parsedInt);
    return IsNull(obj) || (parsed && parsedInt == 0);
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

c# null zero

74
推荐指数
5
解决办法
14万
查看次数

C#HasValue vs!= null

我的问题可能听起来有点愚蠢,但每当我面对它时它都会让我感到烦恼.有什么区别:

where value.HasValue
Run Code Online (Sandbox Code Playgroud)

where value != null
Run Code Online (Sandbox Code Playgroud)

HasValue检查是否value为null?

c# null

69
推荐指数
1
解决办法
5万
查看次数

myNullableLong.HasValue和myNullableLong!= null之间有什么区别吗?

例如,当我有一个可以为空的长度时,它们之间是否有任何区别

myNullableLong.HasValue 
Run Code Online (Sandbox Code Playgroud)

myNullableLong != null
Run Code Online (Sandbox Code Playgroud)

......还是只是'语法糖'?

c# nullable

41
推荐指数
2
解决办法
7873
查看次数

为什么Nullable <T>是一个结构?

我想知道为什么它Nullable<T>是一个值类型,如果它被设计为模仿引用类型的行为?我理解GC压力之类的东西,但我不相信 - 如果我们想要int表现得像参考,我们可能会对所有具有真实参考类型的后果感到满意.我没有理由Nullable<T>不仅仅是盒装版本的Tstruct.

作为价值类型:

  1. 它仍然需要装箱和取消装箱,而且,拳击必须与"普通"结构有点不同(将零值无效视为真实null)
  2. 检查null时需要区别对待(简单地完成Equals,没有真正的问题)
  3. 它是可变的,打破了结构应该是不可变的规则(好吧,它在逻辑上是不可变的)
  4. 它需要有特殊的限制来禁止递归 Nullable<Nullable<T>>

不制作Nullable<T>参考类型可以解决这个问题吗?

改写和更新:

我已经修改了我的理由列表,但我的一般问题仍然是开放的:

引用类型如何Nullable<T>比当前值类型实现更糟糕?这只是GC压力和"小的,不可改变的"规则吗?它对我来说仍然很奇怪......

c# clr nullable

24
推荐指数
3
解决办法
2824
查看次数

检查c#中Nullable Guid是否为空

引自这个问题的答案.

Guid是一个值类型,因此Guid类型的变量不能为null.

如果我看到这个怎么办?

public Nullable<System.Guid> SomeProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)

我应该如何检查这是否为空?像这样?

(SomeProperty == null)
Run Code Online (Sandbox Code Playgroud)

或者像这样?

(SomeProperty == Guid.Empty)
Run Code Online (Sandbox Code Playgroud)

c# guid

17
推荐指数
3
解决办法
7万
查看次数

resharper自定义模式替换与否定等式表达式

我在resharper中有一个规则来查找对Nullable.HasValue的调用

T? foo; 
//...

if(foo.HasValue)
{}

//And it offers to replace with a comparison directly with null:

if(foo != null)
{}
Run Code Online (Sandbox Code Playgroud)

这很有效,但当遇到否定时.HasValue,结果有点奇怪.

if(!foo.HasValue) {}

//is replaced with
if(!(foo != null)) {}
Run Code Online (Sandbox Code Playgroud)

然后resharper希望我简化声明 if(foo == null)

//ideally it would automatically get to this without the extra step:
if(foo == null) {}
Run Code Online (Sandbox Code Playgroud)

该规则定义为:

type:     System.ValueType or derived
nullable: expression of type System.Nullable<$type$>

search pattern:
$nullable$.HasValue

replace pattern:
$nullable$ != null
Run Code Online (Sandbox Code Playgroud)

('替换后格式'和'缩短参考'都被选中)

有没有办法可以编写这个规则,以便ReSharper智能地处理它?我尝试制定第二条规则!$nullable$.HasValue,但这会导致两条规则匹配,这使得工具提示建议看起来令人困惑:replace with == nullreplace …

c# resharper

6
推荐指数
1
解决办法
768
查看次数

检查可空的bool是否为null

可能重复:
首选:Nullable <>.HasValue或Nullable <> == null?

我知道有很多次问这样的问题.但我从来没有找到如何检查可空的bool是否为空的答案.以下是我对此的回答:

bool? nullableBool;
if (nullableBool == true){

}else if (nullableBool == false){

}else{

}
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更好,更直接的方式来减少无用的代码?谢谢.

c#

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

DateTime.hasvalue vs datetime == null,哪个更好,为什么

我想问一个关于控制日期时间的空值的问题。

if (mydatetime != null)
Run Code Online (Sandbox Code Playgroud)

或者

if(mydatetime.hasvalue)
Run Code Online (Sandbox Code Playgroud)

哪个更好,哪个更合适,为什么?

谢谢你。

c# performance null datetime

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

c#xml序列化不写null

当我使用可空的DateTime序列化ac#对象时,有没有办法将空值保留在xml文件之外而不是

 <EndDate d2p1:nil="true" xmlns:d2p1="http://www.w3.org/2001/XMLSchema-instance" />
Run Code Online (Sandbox Code Playgroud)

c# xml null serialization xml-nil

4
推荐指数
1
解决办法
2395
查看次数

标签 统计

c# ×10

null ×4

nullable ×2

.net ×1

boxing ×1

clr ×1

datetime ×1

guid ×1

performance ×1

resharper ×1

serialization ×1

xml ×1

xml-nil ×1

zero ×1