Tag: nullable

为什么不能将nullebles声明为const?

[TestClass] public class MsProjectIntegration { const int? projectID = null; // The type ‘int?’ cannot be declared const // … } 为什么我不能拥有const int? ? 编辑:我想要一个可空的int作为const的原因是因为我只是用它来从数据库加载一些示例数据。 如果它为null我只是在运行时初始化样本数据。 这是一个非常快速的测试项目,显然我可以使用0或-1但是int? 感觉就像我想做的那样正确的数据结构。 readonly似乎是要走的路

C# – 将Nullable 暴露给COM的好方法

我们正在努力将程序集暴露给COM。 除此之外,我们频率使用可空值,例如long?,DateTime?等。这些是generics类型,不能暴露给COM。 什么是COM的这些数据类型的良好替代品? 我们尝试过以下方法: //Original CustomerID property in class public long? CustomerID { get; set; } //Explicit COM interface long IComInterface.CustomerID { get { return CustomerID.GetValueOrDefault(); } set { CustomerID = value; } } 问题是,我们需要一种通过COM来回传递“null”的方法。 使用-1或0之类的数字将不起作用,因为它们也是有效值。 我们不得不使用nullables b / c这些最初来自我们的数据库模式。

在三元操作中为DateTime分配null / Nullable

我有一个声明 DateTime ? dt = (string1 == string2) ? null; (DateTime)(txtbox.Text); 我无法编译。 原因是: null无法分配给DateTime 。 所以,我必须声明一个Nullable nullable变量并将null替换为nullable 。 我不想使用if -statement,我想在一行中执行此操作。 另外,我可以使用操作员?? 这里。

如何将null设置为GUID属性

我有一个Employee类型的对象,它有一个Guid属性。 我知道如果我想设置为null我必须将我的type属性定义为Nullable prop或Guid? 支柱。 但在我的情况下,我无法改变道具的类型,所以它将保持为Guid类型和我的同事,我们不想使用Guid.Empty。 有没有办法将我的属性设置为null或string.empty,以便将数据库中的字段重新设置为null。 我有一个从string.empty转换为null的机制,但如果将更改为接受空guid为null,我将更改许多内容。 请帮忙!

将generics限制为可以为null的事物

我想限制一个通用的我编码到任何可以为null东西。 那基本上是任何类+ System.Nullable (例如int?等)。 对于课堂部分,它很容易: public class MyGeneric where T : class {} 但是,这不允许我这样做: var myGeneric = new MyGeneric(); 或这个: var myGeneric = new MyGeneric<Nullable>(); 编译器抱怨: 错误CS0452:类型’int?’ 必须是引用类型才能在generics类型或方法’Test.MyGeneric’中将其用作参数’T’ 所以我尝试将addind System.Nullable作为T可接受类型: public class MyGeneric where T : class, System.Nullable {} 但它不会这样做。 编译器返回以下错误: 错误CS0717:’System.Nullable’:静态类不能用作约束 然后我试过了 public class MyGeneric where T : class, INullable {} 它确实编译,但是当我这样做时: var myGeneric […]

C#中可空类型的替代方案

我正在编写处理一系列数字数据的算法,有时,系列中的值必须为空。 但是,由于此应用程序对性能至关重要,因此我避免使用可空类型。 我已经对这些算法进行了性能测试,专门比较了使用可空类型和非可空类型的性能,在最好的情况下,可空类型的速度慢了2倍,但往往差得多。 最常用的数据类型是double,目前所选的null替代是double.NaN。 但是我知道这不是NaN值的确切用途,所以我不确定这是否有任何问题,我无法预见,最佳做法是什么。 我有兴趣找出以下数据类型的最佳空替代品:double / float,decimal,DateTime,int / long(尽管其他数据类型非常受欢迎) 编辑:我想我需要澄清我对性能的要求。 数字数据的演出通过这些算法在几个小时的时间内处理。 因此,虽然例如10ms或20ms之间的差异通常是微不足道的,但在这种情况下它确实对所花费的时间产生了重大影响。

带有Nullable 的’==’的参数顺序

以下两个C#函数的区别仅在于将参数的左/右顺序交换为equals运算符== 。 ( IsInitialized的类型是bool )。 使用C#7.1和.NET 4.7 。 static void A(ISupportInitialize x) { if ((x as ISupportInitializeNotification)?.IsInitialized == true) throw null; } static void B(ISupportInitialize x) { if (true == (x as ISupportInitializeNotification)?.IsInitialized) throw null; } 但是第二个的IL代码似乎要复杂得多。 例如, B是: 36个字节(IL代码); 调用其他function,包括newobj和initobj ; 声明四个本地人而不是一个。 IL用于function’A’…… [0] bool flag nop ldarg.0 isinst [System]ISupportInitializeNotification dup brtrue.s L_000e pop […]

XmlSerializer和可空属性

我有一个具有许多Nullable 属性的类,我想将其作为属性序列化为XML。 这显然是禁忌,因为它们被认为是“复杂类型”。 所以,我实现了* Specified模式,我在其中创建了一个add * Value和* Specified属性,如下所示: [XmlIgnore] public int? 年龄 { 得到{return this.age; } 设置{this.age = value; } } [XmlAttribute( “年龄”)] public int AgeValue { 得到{return this.age.Value; } 设置{this.age = value; } } [XmlIgnore] public bool AgeValueSpecified { 得到{return this.age.HasValue; } } 哪个工作正常 – 如果’Age’属性有值,则将其序列化为属性。 如果它没有值,则不会序列化。 问题在于,正如我所提到的,我的class级中有很多Nullable-s,这种模式只是让事情变得混乱和无法管理。 我希望有一种方法可以使Nullable更友好的XmlSerializer。 或者,如果失败了,那就是创建Nullable替换的方法。 有没有人有任何想法我怎么能这样做? 谢谢。

WCF服务合同可以有一个可以为空的输入参数吗?

我的合同定义如下: [OperationContract] [WebGet(UriTemplate = “/GetX?myStr={myStr}&myX={myX}”, BodyStyle = WebMessageBodyStyle.Wrapped)] string GetX(string myStr, int? myX); 我得到一个例外:[InvalidOperationException:合同’IMyGet’中的’GetX’操作有一个名为’myX’的查询变量,类型为’System.Nullable 1[System.Int32]’, but type ‘System.Nullable 1 [System.Int32 ”不能通过’QueryStringConverter’转换。 UriTemplate查询值的变量必须具有可由“QueryStringConverter”转换的类型。 找不到任何有关此错误的信息,除了以下链接: http : //blog.rolpdog.com/2007/07/webget-and-webinvoke-rock.html这有点旧 ,而不是解决方案。 任何想法除了摆脱可以为空的参数做什么? 谢谢。

通过编译器生成的locals以可为空的结构隐式转换为System.Double:为什么会失败?

鉴于以下内容,为什么会抛出InvalidCastException? 我不明白为什么它应该在一个bug之外(这是在x86; x64与clrjit.dll中的0xC0000005崩溃)。 class Program { static void Main(string[] args) { MyDouble? my = new MyDouble(1.0); Boolean compare = my == 0.0; } struct MyDouble { Double? _value; public MyDouble(Double value) { _value = value; } public static implicit operator Double(MyDouble value) { if (value._value.HasValue) { return value._value.Value; } throw new InvalidCastException(“MyDouble value cannot convert […]