标签: nullable

用于将具有非null值的多个属性收集到集合中的简明C#代码?

变化的一个相当基本的问题.鉴于此类:

public class X
{
    public T A;
    public T B;
    public T C;
    ...

    // (other fields, properties, and methods are not of interest here)
}
Run Code Online (Sandbox Code Playgroud)

我要寻找一个简洁的方式来编码,将返回所有的方法A,B,C,...这不是一个枚举集合空.(假设将这些字段声明为数组不是一种选择.)

public IEnumerable<T> GetAllNonNullABCs(this X x)
{
    // ?
}
Run Code Online (Sandbox Code Playgroud)

这种方法的明显实现是:

public IEnumerable<T> GetAllNonNullABCs(this X x)
{
    var resultSet = new List<T>();

    if (x.A != null) resultSet.Add(x.A);
    if (x.B != null) resultSet.Add(x.B);
    if (x.C != null) resultSet.Add(x.C);
    ...

    return resultSet;
}
Run Code Online (Sandbox Code Playgroud)

特别困扰我的是代码看起来冗长而重复,而且我List事先并不知道初始容量.

我希望有一种更聪明的方式,可能涉及 …

c# collections nullable properties

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

.NET缺少方法中的可空类型

我今天注意到,如果你声明一个可以为空的DateTime对象,你就不会获得与拥有标准DateTime对象时相同的函数集.

例如:

DateTime? nullableDT = DateTime.Now;
DateTime regularDT = DateTime.Now;
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,nullableDT不能使用以下任何功能:

ToFileTime
ToFileTimeUtc
ToLocalTime
ToLongDateString
ToLongTimeString
ToOADate
ToShortDateString
ToShortTimeString
ToString(IFormatProvider)
ToString(String)
ToString(String, IFormatProvider)
ToUniversalTime
Run Code Online (Sandbox Code Playgroud)

这是短名单,还有更多方法不可用.

为什么.NET表现得像这样?我绕过可以Convert.ToDateTime()约会的日期来解决这个问题,但这看起来很克服......有更好的方法吗?

.net nullable

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

可选的引用类型

可能重复:
为什么选项[T]?

引用类型提供特殊值,null表示"缺少值".值类型没有这样的值,这就是C#引入可选值类型(以及它们的特殊语法)的原因.

Scala的Option[T]有三种不同的"空"值:null,NoneSome(null).在安全性和可表达性方面,这增加了多少复杂性给我们带来了什么?我什么时候使用哪个?

c# null scala nullable option

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

如何将一个List <int>的内容替换为另一个的内容?

我使用了两个可以为空的int [] s:

int?[] OriginalPterodactylVals = new int?[NUMBER_OF_BABES_IN_TOYLAND];
int?[] ChangedPterodactylVals = new int?[NUMBER_OF_BABES_IN_TOYLAND];
Run Code Online (Sandbox Code Playgroud)

...和这个代码来同步它们:

ChangedPterodactylVals.CopyTo(OriginalPterodactylVals, 0);
Run Code Online (Sandbox Code Playgroud)

...但是现在我已经将int []更改为Lists并且还没有找到或想出如何完成同样的事情.

当一个"复制并粘贴"到另一个中时,它们在列表中都具有相同数量的值.

c# nullable arraylist winforms

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

为什么这些参数不起作用?

public static string ChangeDeviceState(int deviceID, DeviceState nextState)
{
    bool temp1;
    string temp = "";
    return ChangeDeviceState(deviceID, nextState, temp1, temp, "", "", "", "", ""); 
}

public static string ChangeDeviceState(int deviceID, DeviceState nextState, out bool? isAccessToken, out String challengeOrToken, string accessToken, string serialNumber, string MACAddress, string deviceModel, string answer )
{
Run Code Online (Sandbox Code Playgroud)

我所要做的就是有另一种方法,其他参数不是必需的.我bool isAccessToken必须是可空的,challengeOrToken必须是一个out param.

我收到了非法的参数错误.

我真的不明白c#中的这些参数功能.任何帮助是极大的赞赏.

c# nullable out

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

泛型类中可为空的通用字段

我正在尝试做这样的事情:

public class MySuperCoolClass<T>
{
    public T? myMaybeNullField {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

这给了我错误:

错误CS0453:T' must be a non-nullable value type in order to use it as type parameter泛型类型或方法System.Nullable'中的类型T'.

谢谢

c# generics nullable class

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

Nullable <int?>是不可能的,为什么不呢?

对不起,如果它是一个愚蠢的问题,我试图更好地了解.Net中的Nullable类型.

从我注意到的微软源代码(使用ReSharper),我知道Nullable是一个结构,T需要是一个结构

public struct Nullable<T> where T : struct
Run Code Online (Sandbox Code Playgroud)

现在,我试着做这样的事情

public struct CustomNullable<T> where T : struct
{
}
public class CustomNullableClass<T> where T : struct
{
}
Run Code Online (Sandbox Code Playgroud)

我编译时遇到错误:

  Nullable<int?> a = null;
  Nullable<Nullable<int>> a1 = null;
Run Code Online (Sandbox Code Playgroud)

对于上面提到的代码,我得到一个错误'只有非可空值的类型可能是System.Nullable的基础',但是如何在Nullable类型中强制执行?

并为

   CustomNullable<int?> a2 = null;
   CustomNullableClass<int?> a3 = null;
Run Code Online (Sandbox Code Playgroud)

我得到一个错误'类型System.Nullable必须是非可空的值类型才能将其用作参数T'.

我现在有点困惑,有人可以帮我理解发生了什么或者我不明白的东西?

非常感谢提前.

编辑:如果结构是值类型而值类型不能为null,那么Nullable如何成为结构?

信用:消费者

.net c# compiler-construction nullable internals

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

如何声明一个新的运算符"!??" (测试对象不为null)

有没有办法声明一个一元运算符,如'!??'

我想象这样的事情(非工作代码)

public bool operator !??<T> (this <T> item) {
    return item != null;
}
Run Code Online (Sandbox Code Playgroud)

所以我会像这样使用它

// day is a value and might possibly be null
string greeting = name !?? "hello there " + name;
Run Code Online (Sandbox Code Playgroud)

我发现自己经常要做这种尴尬

// day is a value and might be null
string greeting = day != null ? "hello there " + name : "";
Run Code Online (Sandbox Code Playgroud)

在我提供的示例中相当清楚,但是当您使用getter/setter进行视图模型时,它会让人感到有些困惑,并且会增加错过逻辑错误的可能性.因此:

public DateTime? SearchDate {
    get { return _searchDate; }
    set { _searchDate = value != null ? value.Value : …
Run Code Online (Sandbox Code Playgroud)

c# generics nullable unary-operator

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

可空操作符在泛型类中是否有效?

Kotlin有很多功能(?.!!.)处理可空类型.但是这个只是让我感到震惊 - 如果你不知道你是在处理可空或不可空类型呢?如果你有泛型类MyClass<T>,那么你只需要一些类型就可以了T.

Kotlin是否允许将"可空"运算符应用于泛型类型(T此处),类型是否可以类(如T?)中变为可空,以及如果类将使用可空类型实例化,如果类似MyClass<String?>.它会**std::stringMyClass类型中导致可为空的可空(如指向C++中的指针 - )类型吗?

generics nullable kotlin

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

如何翻译"var a = collection?.First()?. somePropA ?? new A();"

使用null-coalescing运算符在赋值表的赋值右侧单个问号的目的是什么?例:

var a = collection?.First()?.somePropA ?? new A();
Run Code Online (Sandbox Code Playgroud)

c# nullable null-coalescing

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