Tag: nullable

以编程方式获取entity framework中的Property的’Nullable’状态

我需要为EF中的字段获取Nullable属性。 一些魔法代码需要在Nullable = True的属性上完成,我找不到一个有效的解决方案来获取属性。 foreach (PropertyInfo property in (PropertyInfo[])type.GetProperties()) { var getPropertyType = property.GetMethod.ReturnTypeCustomAttributes.ToString(); var getValue = property.GetValue(model); bool isNullable = property.PropertyType.IsGenericType && property.PropertyType.GetGenericTypeDefinition() == typeof(Nullable); // isNullable always returns false !!!! and I need it to return true if the field is allowed to be null if ((getValue == null) && (!isNullable)) { } […]

InvalidCastException尝试从盒装int转换为可为空的枚举

我有一个枚举, Foo : public enum Foo { Alpha, Bravo, Charlie } 如果我尝试从盒装int到Foo?的以下演员Foo? ,我得到一个InvalidCastException : var x = (Foo?)(object)1; 这导致我进行了一些实验…… var x = (Foo)(object)1; // succeeds var x = (long)(object)1; // fails var x = (long?)(object)1; // fails var x = (long)1; // succeeds var x = (long?)1; // succeeds var x = (int)(object)1; // succeeds […]

LINQ Join查询(表之间有可为空的ref)

我有3张桌子。 例如客户 , 公司和地址 。 客户已获得公司的支持。 公司有2个可空的地址(账单和运输),因此在某些情况下可能不存在地址。 我需要make join查询,但是如果Company.BillingAddress或Company.ShippingAddress等于null ,我不会获得所有数据)。 我试过了(但这是错误的查询): var res = (from client in context.Clients join clientCompany in context.Companies on client.ClientCompanyId equals clientCompany.Id into clientCompanyJoin from company in clientCompanyJoin join addressBilling in context.Addresses on company.BillingAddressId equals addressBilling.Id join addressShipping in context.Addresses on company.ShippingAddressId equals addressShipping.Id select new { Client = client, Company […]

类型推断在对可空和非可空int的’join’调用中失败

在我的Linq中,我试图将内部联接设置为可以为空的字段。 员工和部门有关系,部门可能有EmployeeID或可能有null。 那么什么是我的连接,如果我只想要满足内连接的记录(没有结果为null EmployeeIDs): var result = from emp in employees join dept in departments on new { Source = emp.EmployeeID } equals new { Source = dept.EmployeeID }; 我得到一个例外: join子句中某个表达式的类型不正确。 在“加入”调用中类型推断失败。 谢谢

具有可空类型的REST?

我打了砖墙。 我的REST实现不接受Nullable值。 [OperationContract] [WebInvoke(ResponseFormat = WebMessageFormat.Json, UriTemplate = “/Transactions?AccNo={AccNo}&CostCentreNo={CostCentreNo}&TransactionType={TransactionType}&Outstanding={Outstanding}&CheckStartDate={CheckStartDate}&CheckEndDate={CheckEndDate}”)] List GetTransactions(Int32 AccNo, Int32 CostCentreNo, Int32 TransactionType, Boolean Outstanding, DateTime? CheckStartDate, DateTime? CheckEndDate); 而我原来的SOAP实现确实如此。 那么有办法解决这个问题吗? 或者我是否必须重新编写代码? 我仍然不明白为什么日期时间必须可以为空而无法设置为null。

理解空合并运算符(??)

我有一个自定义WebControl ,它实现了一个返回Nullable 的.Value getter / setter 它是一个客户端过滤的文本框( TextBox的子类,包含javascript和一些用于设置/获取值的服务器端逻辑) 这是来自该控件的getter和setter: public decimal? Value { get { decimal amount = 0; if (!decimal.TryParse(this.Text, NumberStyles.Currency, null, out amount)) { return null; } else { return amount; } } set { if (!value.HasValue) { this.Text = “”; } else { this.Text = string.Format(“${0:#,##0.00}”, value); } } } 我看到的问题是这个语句的输出: decimal […]

是否可以使用操作员? 并抛出新的exception()?

我接下来有很多方法: var result = command.ExecuteScalar() as Int32?; if(result.HasValue) { return result.Value; } else { throw new Exception(); // just an example, in my code I throw my own exception } 我希望我可以使用运算符?? 像这样: return command.ExecuteScalar() as Int32? ?? throw new Exception(); 但它会生成编译错误。 是否可以重写我的代码,或者只有一种方法可以做到这一点?

.Net如何将Nullables设置为Null

Nullable类型被定义为struct 。 在.Net中,您不能将null赋给struct因为structs是不能用null表示的值类型( Nullable除外)。 int i = null; // won’t compile – we all know this int? i = null; // will compile, and I’m glad it does, and it should compile, but why? Nullable如何成为规则的例外“你不能为值赋值null ?” Nullable的反编译代码没有提供关于如何发生这种情况的见解。

将struct与null进行比较时,编译器警告错误

请考虑以下代码: DateTime t = DateTime.Today; bool isGreater = t > null; 使用Visual Studio 2010(C#4,.NET 4.0),我收到以下警告: 警告CS0458:表达式的结果始终为’bool’类型的’null’ 这是不正确的; 结果始终为false (类型为bool ): 现在,struct DateTime重载了> (大于)运算符。 任何不可为空的结构(如DateTime)都可以隐式转换为相应的Nullable类型。 上面的表达式完全相同 bool isGreater = (DateTime?)t > (DateTime?)null; 这也产生了同样的错误警告。 这里>运算符是提升运算符。 如果其两个操作数中的任何一个的HasValue为false,则返回false 。 否则,提升的运算符将继续将两个操作数展开到底层结构,然后调用该结构定义的>的重载(但在这种情况下,如果一个操作数不是HasValue则不需要)。 你能重现这个bug吗?这个bug是众所周知的吗? 我误解了什么吗? 这对于所有结构类型(不是像int这样的简单类型,而不是枚举类型)都是相同的,它会使运算符重载。 (现在如果我们使用==而不是> ,一切都应该完全相似(因为DateTime也会重载==运算符)。但它不相似。如果我说 DateTime t = DateTime.Today; bool isEqual = t == null; 我没有得到警告☹有时你会看到人们不小心检查变量或参数为null,没有意识到他们的变量类型是一个结构(它重载==而不是像int这样的简单类型)。 如果他们得到警告会更好。) 更新:使用Visual Studio […]

类型’T’必须是非可空值类型,以便在generics类型或方法’System.Nullable ‘中将其用作参数’T’

为什么我在以下代码中收到此错误? void Main() { int? a = 1; int? b = AddOne(1); a.Dump(); } static Nullable AddOne(Nullable nullable) { return ApplyFunction(nullable, (int x) => x + 1); } static Nullable ApplyFunction(Nullable nullable, Func function) { if (nullable.HasValue) { T unwrapped = nullable.Value; TResult result = function(unwrapped); return new Nullable(result); } else { return new Nullable(); […]