我的对象通常具有可空类型属性,用作SQL命令参数.
我下一步初始化它们:
public int? Amount
{
get
{
int i;
int? amount = null;
if (Int32.TryParse(Request["amount"], out i))
{
amount = i;
}
return amount;
}
}
command.Parameters.Add("@amount").Value = (object)this.Amount ?? DbNull.Value;
Run Code Online (Sandbox Code Playgroud)
如何重写这样的初始化代码以使其更短或更快?
好吧,我仍然有点新的使用可空类型.
我正在为我的一个项目编写一个反射对象步行器,即时通讯即可设置反射属性的值,并使用从反射属性中检索的值.
我检索到的值仍然是object形式,它突然出现在我身上,因为我希望我的对象walker在无法找到某些东西时返回null,(我想要抛出一个异常,但我希望这会软失败什么时候出错了).
无论如何,一些值的IM设置/获取是decimal bool等等......所以我想通了,我应该只是没有设置非空值,但我意识到我仔仔不知道如何告诉decimal从decimal?
如果继承属性im设置的类型,是否足以键入ValueType?
我想交换两个可以为空的十进制值,如下所示:
o2 = Interlocked.Exchange(ref o1, o2);
Run Code Online (Sandbox Code Playgroud)
类型'十进制?' 必须是引用类型才能在泛型类型或方法'System.Threading.Interlocked.Exchange(ref T,T)'中将其用作参数'T'.
有没有比这更好的想法:
decimal? temp = o1;
o1 = o2;
o2 = temp;
Run Code Online (Sandbox Code Playgroud)
提前致谢!
这是我想做的事情:
and [<AbstractClass>] Figure() =
let mutable name : string = ""
let mutable color : ColorType = WHITE
abstract member Name : string
member F.Color
with get() = color
and set v = color <- v
abstract member motion : Dashboard -> SPosition -> ColorType -> list<SPosition * CellDashboard * bool>;
override F.ToString() = name
and CellDashboard(addingFigure : Nullable<Figure>) as C =
let mutable attacked : bool = false;
let mutable cleaned : bool = false;
let mutable _CellState …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种更简洁的方式在C#中表达以下测试,其中x是可以为空的int
英语:如果x有一个值并且y> x那么就做点什么
C#更简洁:
if(x.HasValue && y > x)
Run Code Online (Sandbox Code Playgroud)
类似地,如果我想将可以为空的布尔值(x)默认为false,我可能会写:
if(x ?? false)
{
//x is true
}
else
{
//x is either null or false
}
Run Code Online (Sandbox Code Playgroud)
代替:
if(x.HasValue() && x == true)
Run Code Online (Sandbox Code Playgroud)
非常感谢
我有一个我写的 WPF IValueConverter。我计划在很多地方使用它。它有一个公共属性,它是可为空的 DateTume 的集合。即列表例如
private List<DateTime?> _dates = new List<DateTime?>();
public List<DateTime?> Dates
{
get { return _dates; }
set { _dates = value; }
}
Run Code Online (Sandbox Code Playgroud)
如何在 XAML 中传递一组值,包括空值?
我的尝试是
<myns:MyConverter x:key="MyName">
<myns:MyConverter.Dates>
<sys:DateTime>1 Jan 2014</sys:DateTime> <!-- this works -->
<sys:DateTime /> <!-- unf this comes through as 1 Jan 0001 -->
<sys:DateTime? /> <!-- invalid syntax with the ? character -->
</myns:MyConverter.Dates>
</myns:MyConverter>
Run Code Online (Sandbox Code Playgroud) 我有一个TextBox控件,它应该存储一个日期.只要日期不是我的页面中的必填字段(我正在使用Web窗体),我传递的是DateTime?(可为空),而不是连接到数据库并插入适当值的方法的DateTime变量.它看起来像这样.
public void DatabaseMethod(DateTime? myDate)
{
// Insert the appropriate value into the database
}
// I'm calling the above method like this:
DatabaseMethod(String.IsNullOrWhiteSpace(txtContractMyDate.Text) ? null : Convert.ToDateTime(txtContractMyDate.Text));
Run Code Online (Sandbox Code Playgroud)
我从编译器收到的消息类似于"条件语句的类型无法确定,因为'null'和'System.DateTime'之间没有隐式转换".
我可以做以下事情:
DateTime? myDate = null;
if (!String.IsNullOrWhiteSpace(txtContractMyDate.Text))
{
myDate = Convert.ToDateTime(txtContractStornoDate.Text);
}
Run Code Online (Sandbox Code Playgroud)
然后调用方法如:
DatabaseMethod(myDate);
Run Code Online (Sandbox Code Playgroud)
当然,这没关系,但我无法弄清楚为什么我从编译器得到声明的消息("条件语句的类型无法确定,因为'null'和'System之间没有隐式转换. DateTime'").
我正在使用ASP.NET MVC 5与Entity Framework 6和Razor.我有以下代码:
[...]
@foreach (var item in Model) {
<tr>
<td>
@item.Superpower.Title
</td>
<td>
[...]
Run Code Online (Sandbox Code Playgroud)
然而,@item.Superpower.Title一行InvalidOperationException告诉Nullable object must have a value.我,我已经使用了nullables,我确切地知道这个错误意味着什么.但问题是,我既没有可空的,也没有null价值.item不可空,有价值,item.Superpower不可空,有价值,item.Superpower.Title不可空,有价值.我可以简单地验证所有:

我可以展开并查看双方的所有必需的属性item,并item.Superpower在这方面.为什么我会得到这个错误而没有无效的上下文?
我需要一些有关如何在下面的代码片段中将此字符串设置为null值的信息.
[Index(IsUnique = true)]
[StringLength(450)]
public string StockCode
{
get { return _stockCode; }
set { _stockCode = value.ToUpper(); } //(ToUpper)<<-- Error
}
Run Code Online (Sandbox Code Playgroud)
当我尝试以正常方式执行此操作时,public string? StockCode我得到了错误,.ToUpper并说:
'System.Nullable'不包含'ToUpper'的定义,并且没有扩展方法'ToUpper'可以找到接受类型'System.Nullable'的第一个参数(你是否缺少using指令或汇编引用?)
我不是专家或专业C#编码器,所以我不知道如何将我的字符串设置为空值并仍然使用.ToUpper我试图这样做的方式.:( 任何意见,将不胜感激!
我正在为一个对象实现一个ToString方法.该方法看起来像:
public override string ToString()
{
return "E" + (myNum ?? SQLIndex) + STK.ExtraLabel(areaType);
}
Run Code Online (Sandbox Code Playgroud)
其中myNum是一个可以为空的int,而SQLIndex只是一个int.
但权力已经决定,如果SQLIndex尚未设置(如果没有设置,则用于= -1),我们应该在那里放置"NEW"而不是-1.
所以我将SQLIndex更改为可以为空的int,但是这段代码不起作用,因为我在猜测?运算符不能返回int和string,即使int将被转换为字符串:
public override string ToString()
{
return "E" + (myNum ?? SQLIndex ?? "NEW") + STK.ExtraLabel(areaType);
}
Run Code Online (Sandbox Code Playgroud)
我目前正在使用三元运算符来实现相同的效果,但为了便于阅读,有没有办法使用快捷方式?运营商在这?