我只需要能够将一个对象转换为可以为空的枚举.对象可以是enum,null或int.谢谢!
public enum MyEnum { A, B }
void Put(object value)
{
System.Nullable<Myenum> val = (System.Nullable<MyEnum>)value;
}
Put(null); // works
Put(Myenum.B); // works
Put(1); // Invalid cast exception!!
Run Code Online (Sandbox Code Playgroud) 可能重复:
C#可以将值类型与null进行比较
如果我尝试null在C#中分配一个不可为空的类型:
System.DateTime time = null;
Run Code Online (Sandbox Code Playgroud)
我会得到一个编译时错误:
错误CS0037:无法将null转换为'System.DateTime',因为它是一个不可为空的值类型
这是有道理的.但如果比较相同的类型null:
System.DateTime time = obtainFromSomewhere();
if( time == null ) {
//whatever;
}
Run Code Online (Sandbox Code Playgroud)
没有编译时错误.这对我来说没有意义 - 如果我不能分配null那么为什么会这样null呢?
为什么我可以将非可空类型与null?进行比较?
我的SQL Server数据库包含可为空的DateTime值.如何在C#中的应用程序中将它们转换为可以为空的DateTime对象?
这是我认为它会是什么样子,但它没有:
DateTime? dt = (DateTime?) sqldatareader[0];
Run Code Online (Sandbox Code Playgroud) 我有一个多对一的关系,我想要可以为空:
@ManyToOne(optional = true)
@JoinColumn(name = "customer_id", nullable = true)
private Customer customer;
Run Code Online (Sandbox Code Playgroud)
不幸的是,JPA将我的数据库中的列设置为NOT NULL.有谁能解释一下?有没有办法让它发挥作用?请注意,我使用JBoss 7,JPA 2.0和Hibernate作为持久性提供程序和PostgreSQL 9.1数据库.
编辑:
我找到了问题的原因.显然,这是由于我在引用实体中定义主键的方式Customer:
@Entity
@Table
public class Customer {
@Id
@GeneratedValue
@Column(columnDefinition="serial")
private int id;
}
Run Code Online (Sandbox Code Playgroud)
看来,使用@Column(columnDefinition="serial")主键会自动将引用它的外键设置到NOT NULL数据库中.将列类型指定为时,这确实是预期的行为serial吗?在这种情况下,是否有解决方案来启用可为空的外键?
先感谢您.
我有一个Employee类型的对象,它有一个Guid属性.我知道如果我想设置为null我必须将我的type属性定义为可空的Nullable<Guid>prop或Guid?支柱.
但在我的情况下,我无法改变道具的类型,所以它将保持为Guid类型和我的同事,我们不想使用Guid.Empty.
有没有办法将我的属性设置为null或string.empty,以便将数据库中的字段重新设置为null.
我有一个从string.empty转换为null的机制,但如果将更改为接受空guid为null,我将更改许多内容.
请帮忙!
这是我的一个模型的简化版本:
class ImportRule(models.Model):
feed = models.ForeignKey(Feed)
name = models.CharField(max_length=255)
feed_provider_category = models.ForeignKey(FeedProviderCategory, null=True)
target_subcategories = models.ManyToManyField(Subcategory)
Run Code Online (Sandbox Code Playgroud)
此类管理用于将项目列表从订阅源导入数据库的规则.
尽管管理系统在模型中声明为可空,但管理员系统不会在不选择feed_provider_category的情况下添加ImportRule.数据库(SQLite目前)甚至检查出ok:
>>> .schema
...
CREATE TABLE "someapp_importrule" (
"id" integer NOT NULL PRIMARY KEY,
"feed_id" integer NOT NULL REFERENCES "someapp_feed" ("id"),
"name" varchar(255) NOT NULL,
"feed_provider_category_id" integer REFERENCES "someapp_feedprovidercategory" ("id"),
);
...
Run Code Online (Sandbox Code Playgroud)
我可以很容易地在python shell中创建对象:
f = Feed.objects.get(pk=1)
i = ImportRule(name='test', feed=f)
i.save()
Run Code Online (Sandbox Code Playgroud)
...当然,管理系统不会让我编辑它.如何让管理员让我编辑/创建对象而不指定该外键?
我想知道?C#中的含义是什么?
我看到的东西是:DateTime?或者int?.我想这是特定于C#4.0的?
我不能在谷歌找它,因为我不知道这个东西的名字.
问题是我使用的日期时间和我有很多投的错误(从DateTime到DateTime?).
谢谢
我有下面的代码,我需要将一个字符串转换为一个也从String指定的类型:
Type t = Type.GetType("System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]");
object d = Convert.ChangeType("2012-02-23 10:00:00", t);
Run Code Online (Sandbox Code Playgroud)
我得到以下错误消息:
Invalid cast from 'System.String' to 'System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'.
Run Code Online (Sandbox Code Playgroud)
怎么会很好的可能?
我知道一种丑陋的方法是使用if来检查类型是否可以为空:
Type possiblyNullableType = Type.GetType("System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]");
var underlyingType = Nullable.GetUnderlyingType(possiblyNullableType);
Object result;
// if it's null, it means it wasn't nullable
if (underlyingType != null)
{
result = Convert.ChangeType("2012-02-23 10:00:00", underlyingType);
}
Run Code Online (Sandbox Code Playgroud)
会有更好的方法吗?
谢谢,
我昨天升级到了Xcode 6.3.从那以后,我一直无法构建任何具有Parse.framework的东西.对于PFConstants.h,我得到错误
nullability specifier '_nullable' cannot be applied to non-pointer
我之前从未见过这个错误,除了更新到6.3之外什么都没有改变.有任何想法吗?
现在在objective-c中有两个新的注释:nonnull和nullable.
我应该将哪一个用于init方法的返回类型规范?
- (instancetype)init {
if (self = [super init]) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
可空的声音:
有一个"if"来检查[super init]返回什么,并且不能保证它永远不会返回nil.
nonnull的声音:
当init返回nil并且我从不检查它时,我不知道真实的情况.
nullable ×10
c# ×6
.net ×2
datetime ×2
asp.net ×1
django-admin ×1
enums ×1
foreign-keys ×1
generics ×1
guid ×1
init ×1
ios ×1
jboss7.x ×1
jpa-2.0 ×1
many-to-one ×1
non-nullable ×1
objective-c ×1
sql-server ×1
xcode ×1