标签: nullable

具有泛型的可空基元

我试图在可空的布尔值上找到一个非空验证的正确方法.我也希望能够对其他一些领域做同样的事情,包括字符串,整数等,所以我想在方法中使用泛型.这是一个可能发生的事情的例子.

bool? myValue = null;
bool valid = ValidateNotNull(myValue);
Run Code Online (Sandbox Code Playgroud)

这里有一些验证码:

public bool ValidateNotNull<T>(T nullableField)
{
    return nullableField != null;
}
Run Code Online (Sandbox Code Playgroud)

我发现这类问题的所有答案都建议在方法签名中添加一个where T : struct或者where T: class,或者default(T)在比较中使用,这些都不适用于bool,其中false有效值.

还有其他建议吗?代码编译,但Resharper对于它认为可能是原始值的值的空值比较感到不满意,而且我很想知道我应该做些什么来振作起来.

注意:这不是完整的代码.我仍然有兴趣保持这种类型.这也不是我遇到问题的唯一地方.

NB2:是的,它编译并正常工作.我真正想知道的是,是否有一个代码解决方案可以阻止Resharper抱怨,或者是一种惯用的方法来做这个我不知道的事情.

c# generics resharper nullable

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

如果Sum()值返回Null使用0,目前它是否可以转换为可以为空的double?

我有一个LINQ语句,它工作得很好......它的选择就在这里

 select new
 {
     Net = (System.Double?)
     ((from m0 in MOVTOS
     where m0.DocumentType == "NET" && m0.ClientCode == c.ClientCode
     group m0 by new { 0.ClientCode } into g
     select new
     {
         Expr1 = (System.Double)g.Sum(p => p.Amount)
     }).First().Expr1)
};
Run Code Online (Sandbox Code Playgroud)

现在,如果你注意到我正在使用System.Double?(可以为空的双重)作为一个演员在乞讨,因为一些值在SUM上返回为NULL.

如果我将其更改为System.Double,则会失败并显示错误

无法将null值分配给类型为System.Double的成员,该成员是非可空值类型

所以我想要做的是返回SUM的值,但如果它是NULL,那么在那里输入0.

任何帮助真的很感激

c# linq group-by nullable sum

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

If()函数中可空整数的默认值不同

我试图理解为什么两个代码示例的行为不同.我一直认为If()函数可以模仿If语言特性.或者我是否正在查看导致此问题的Nullable(Of Integer)行为?

样品#1:

If Not String.IsNullOrWhiteSpace(PC.SelectedValue) Then

    Dim pcFilter1 As Integer? = CInt(PC.SelectedValue)

Else

    Dim pcFilter1 As Integer? = Nothing

End If
Run Code Online (Sandbox Code Playgroud)

样品#2:

Dim pcFilter2 As Integer? = If(Not String.IsNullOrWhiteSpace(PC.SelectedValue),
                               CInt(PC.SelectedValue),
                               Nothing)
Run Code Online (Sandbox Code Playgroud)

结果:

pcFilter1 =没什么

pcFilter2 = 0

.net vb.net integer nullable

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

如何在实体框架中具有映射到可空数据库列的值类型?

我有以下实体模型:

public class Todo  
{  
    [Required]  
    public int ID { get; set; }  
    public int OrderId { get; set; } //Not required  
    public string Description { get; set; }  
    public bool Finished { get; set; }  
    public DateTime CreationDate { get; set; }  
    public int Priority { get; set; } //Not required  
    public string CreatedBy { get; set; }  
    public bool Deleted { get; set; }  
}
Run Code Online (Sandbox Code Playgroud)

在相应的数据库表中,所有字段都创建为"not null".我想允许一些字段为空.我该怎么做呢?

c# entity-framework nullable

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

更改可空类型的最佳方法,如果不为null,但如果为null则返回null

这种事情总是出现,

这有效但很难看:

DateTime? firstDay = null;
if (Day.HasValue) firstDay = Day.Value.AddDays(-14);
Run Code Online (Sandbox Code Playgroud)

这不起作用:

约会时间?firstDay = Day.HasValue?Day.Value.AddDays(-14):null;

除非:

DateTime? firstDay = Day.HasValue ? Day.Value.AddDays(-14) : (DateTime?)null;
Run Code Online (Sandbox Code Playgroud)

也许应该有另一个运营商!

DateTime? firstDay = Day ??? Day.Value.AddDays(-14);
Run Code Online (Sandbox Code Playgroud)

.net nullable

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

C#与Nullables的行为

在C#中

int? a1 = 0;
int? a2 = 100;
a1 = a1 | default(int?);
a2 = a2 | default(int?);

bool? a1 = null;
bool? a2 = true;
a1 = a1 | default(bool?);
a2 = a2 | default(bool?);

这段代码没有发出警告,说表达式的结果总是为null.推断的原因是'I_dont_know'| int ='I_dont_know',其中'I_dont_know'| true = true

如我错了请纠正我

c# nullable

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

通用类型函数:返回不可为空的值

我写了这个简单的实用函数:

public static T isNull<T>(T? v, T d)
{
    return v == null ? d : v.Value;
}
Run Code Online (Sandbox Code Playgroud)

目的是避免烦人的任务,例如检查成员是否为null,在读取linq记录集时非常常见.问题是它抛出了这个错误:

类型'T'必须是非可空值类型,以便在泛型类型或方法'System.Nullable <T>'中将其用作参数'T'

错误似乎是合法的,无论如何我希望我可以这样做:

int? myField = record.myField;
int  myValue = isNull(myField, 0);
Run Code Online (Sandbox Code Playgroud)

代替:

int? myField = record.myField;
int  myValue = myField == null ? 0 : myField.Value;
Run Code Online (Sandbox Code Playgroud)

我觉得我缺少一些c#基础知识.有没有办法完成我的任务?

c# generics nullable default-value non-nullable

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

Nullable对象的类

这个问题更像是一种好奇心......

假设有一个类:

public class Foo{
public int? x {get; set;}
public int? y {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

在项目实例的某处创建了:

var foo1= new Foo
         {
           x= 1;
           y= 1;
         };

var foo2= new Foo
         {
           x= 1;
           y= 1;
         };
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因他们想检查是否相互相等并将它们设置为NULL是否相同并打印到屏幕上...

例如:

if(foo1.x == foo2.x)
   foo1.x = null;
if(foo1.y == foo2.y)
   foo1.y = null;

if(foo1 == null){
   Console.WriteLine("foo1 is NULL");
}else{
   Console.WriteLine("foo1 is not NULL");
}
Run Code Online (Sandbox Code Playgroud)

哪个会打印?

foo1的实例存在,但它的所有对象都设置为NULL.我对可空类型的概念不熟悉,所以这给我带来了好奇心!(我的Visual Studio是在fritz或我自己测试)

c# logic nullable class

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

使用Optional Java 8避免在List处理中进行"空检查"

在Class中Site,我有两种实用方法.

第一个,如果没有错误发生parseStub,则解析Site为a ; 否则,它返回.使用:Master nullOptional

public static Optional<Master> parseStub(Site site) {
    // do some parse work; return Optional.empty() if the parse fails.
}
Run Code Online (Sandbox Code Playgroud)

第二种方法parseStubs是解析的列表Site到的列表Master.它重用parseStub,并且必须处理可能为空的Optional<Master>:

public static List<Master> parseStubs(List<Site> sites) {
    return sites.stream()
            .<Master>map(site -> Site.parseStub(site).orElse(null))
            .filter(Objects::nonNull)
            .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

请注意,在上面的代码中,我null再次介绍.
我怎么能避免null(和filter(Objects::nonNull))使用Optional一致?

functional-programming nullable optional java-8 java-stream

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

@NotNull和@Nullable,与Java注释矛盾

我偶然发现我不小心这样做了:

@javax.annotation.Nullable
@javax.validation.constraints.NotNull
Run Code Online (Sandbox Code Playgroud)

编译器没有抱怨,一切似乎都很好。

现在,我想知道当两个或更多注释相互矛盾时内部发生了什么。此外,顺序重要吗?

这是

@Nullable
@NotNull
Run Code Online (Sandbox Code Playgroud)

比这一样吗?

@NotNull
@Nullable
Run Code Online (Sandbox Code Playgroud)

一般来说,这对注释如何起作用?谁赢?

编辑:我正在寻找一个一般性的答案,不一定关于这两个注释

java annotations nullable

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