我正在使用一个库,并在使用我已经制作的函数时注意到一些奇怪的东西(我必须在哪里进行投射).
该库的功能定义如下
public DateTime? GetDate(){..}
Run Code Online (Sandbox Code Playgroud)
这有什么意义?为什么不让它成为常规DateTime并且null如果在获取日期时出现错误则正常返回?我错过了关于Nullable类型的重要内容吗?
我有一个网站表,其中有一个客户表的外键.网站并不总是会有一个关联的客户端,但是当我在没有指定客户端的情况下保存网站时,它会出错,因为Website.ClientID是一个int32(不可为空)并且设置为0.
我尝试将我的EF图中的关系更改*为网站的旁边和客户端旁边的0..1然后它给出一个错误,说它不能为ClientID做0..1,因为它不可为空.然后我将Website.ClientID更改为可为空,但现在它给出了此错误:
TothSolutions.msl(69,10) : error 3031: Problem in mapping fragments starting
at line 69:Non-nullable column Website.ClientID in table Website is mapped to
a nullable entity property.
Run Code Online (Sandbox Code Playgroud)
如何设置依赖对象可以为空的外键关系?
枚举通常用于定义类的特定属性的状态,比如在某种对象模型中.对于其中一些属性,状态'此属性未设置'是有效的.
在这些情况下,我应该使用零None枚举值,还是使属性类型可以为空?
public MyEnum Property { get; set; }
public enum MyEnum {
None = 0,
Value1,
Value2
}
Run Code Online (Sandbox Code Playgroud)
要么
public MyEnum? Property { get; set; }
public enum MyEnum {
Value1,
Value2
}
Run Code Online (Sandbox Code Playgroud) 我倾向于这样做,例如接受整数的方法:
DoSomethingWithThisInt((int)dbObj.nullableInteger);
Run Code Online (Sandbox Code Playgroud)
但是我通常也会确保这个代码永远不会发生,除非它有一个值,有时这意味着我必须首先检查null,这需要更多行代码.
有没有更好的方法,或者我只是通过简单的方式做到这一点?
我正在尝试使用可选参数SpriteFont = myFont工作制作方法.因为spritefont不是编译时常量,所以我不能使用它,所以我决定尝试SpriteFont? = null:
void MyMethod(int x, SpriteFont? font = null)
{
SpriteFont f;
if (font == null) f = defaultFont; else f = font; // Cannot convert type 'Microsoft.Xna.Framework.Graphics.SpriteFont?' to 'Microsoft.Xna.Framework.Graphics.SpriteFont'
}
Run Code Online (Sandbox Code Playgroud)
如何拿出我SpriteFont的SpriteFont??
UPD:默认情况下,这可能是类型无法从可空转换为基类型的问题.(SpriteFont)font仍然导致"无法转换".
UPD2:SpriteFont默认情况下可以为空.不过,我现在知道如何使用nonNullable?.
我正在使用Razor在VS2013中使用VB.NET MVC 5.1
siq.Price是一个十进制?
我正在尝试检查siq.Price是否有值,如果是,则将其打印为货币.我在尝试访问.Value属性时收到此错误,其中true为.HasValue返回true的元素:
可以为空的对象必须具有值.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.InvalidOperationException:Nullable对象必须具有值.
我尝试了这两行代码,认为它们应该没有问题,但收到了上面的错误:
@IIf(siq.Price.HasValue, siq.Price.Value, "N/A")
'and
@IIf(siq.Price.HasValue, siq.Price.Value.ToString("C"), "N/A")
Run Code Online (Sandbox Code Playgroud)
一旦我从TruePart中删除了.Value,它就开始工作了:
@IIf(siq.Price.HasValue, siq.Price, "N/A")
'and
@IIf(siq.Price.HasValue, String.Format("{0:C}", siq.Price), "N/A")
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么会这样吗?!我很困惑.
注意:如果Price有值,这段代码就可以自己运行,但是在IIf()中没有:
@siq.Price.Value.ToString("C")
Run Code Online (Sandbox Code Playgroud) 想知道是否有更简单的方法来检查可空的bool是否为真.
我发现自己做了很多像这样的代码变得非常笨重.有没有更快的方法呢?
bool? x = false;
if (x.hasValue && x.Value) ...
Run Code Online (Sandbox Code Playgroud)
似乎必须有一个干净的更快的方法来检查真实
使用??和if (foo == null) {...} else {...}在C#之间有区别吗?
我在使用?:运算符的方法中返回可空类型时遇到了一些困难.
例如,这有效:
public static Int32? RunInt32Query(string query, KeyValueCollection parameters)
{
object scalar = RunScalarQuery(query, parameters);
if (scalar != null)
{
return Convert.ToInt32(scalar);
}
else
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
但是这个例子不起作用,它不会编译:
public static Int32? RunInt32Query(string query, KeyValueCollection parameters)
{
object scalar = RunScalarQuery(query, parameters);
return (scalar != null) ? Convert.ToInt32(scalar) : null;
}
Run Code Online (Sandbox Code Playgroud)
据我了解,这两种方法在高水平上几乎完全相同,但显然不是?
您好,有没有办法制定如下所示的条件?如果field为null则为false else field.Property?
class Node
{
public bool IsFilled;
}
class Holder
{
Node nodeBuffer;
public bool IsFilled => this.nodeBuffer?.IsFilled ?? false;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么说if nodeBuffer is null then false else nodeBuffer.IsFilled呢?
nullable ×10
c# ×8
asp.net-mvc ×1
casting ×1
enums ×1
null ×1
object-model ×1
razor ×1
sql ×1
vb.net ×1