Tag: 三元运算符

C#中的条件运算符和返回类型

可能重复: 为什么null需要显式类型转换? 可空类型和三元运算符。 为什么这不起作用? 试图执行以下操作: sqlCmd.Parameters.Add(“@DateCreated”, System.Data.SqlDbType.DateTime).Value = myObject.DateCreated == DateTime.MinValue ? DBNull.Value : myObject.DateCreated; 我收到此错误: 无法确定条件表达式的类型,因为’System.DBNull’和’System.DateTime’之间没有隐式转换 我很明白这个错误,但为什么类型甚至是什么,因为Parameters.Value属于对象类型? 有没有办法完成我想要做的事情?

使用三元语法将参数设置为DBNull.Value会产生错误?

我有以下代码来设置一个参数,该参数将在INSERT语句中用于在SQL Server数据库中设置VARCHAR列。 我的值对象(名为ilo)有一个名为Description的属性,它被初始化为String.Empty,然后被设置为从XML读取的某个值,或者如果该XML元素为空,它只保留为String.Empty。 因此,当插入数据库时​​,如果属性仍设置为String.Empty,我想让它插入一个空值。 database.AddInParameter(cmd, “@description”, DbType.String, (ilo.Description.Equals(string.Empty)) ? DBNull.Value : ilo.Description); 所以基本上我是说,如果ilo.Description等于string.empty,请将参数设置为DBNull.Value,否则将其设置为ilo.Description。 这在Visual Studio中出现以下错误… 错误141无法确定条件表达式的类型,因为’System.DBNull’和’string’之间没有隐式转换 为什么? 奇怪的是,我可以做到以下没有错误,这应该与使用上面的内联条件语法完全相同!?! if(ilo.Description.Equals(string.Empty)) { database.AddInParameter(cmd, “@description”, DbType.String, DBNull.Value); } else { database.AddInParameter(cmd, “@description”, DbType.String, ilo.Description); } 我搜索了其他post,找到了下面的post,但它并没有真正回答我的问题。 EntLib将“空”值绑定到参数的方法 我对WHY更感兴趣,因为明显的解决方法是使用if / else语句而不是内联(三元)语法? 在这个链接上有一个答案,但我想要一个更好的解释,因为它似乎是我的BS,这不起作用; 我称之为虫子! http://msdn.microsoft.com/en-us/library/ty67wk28.aspx

如何以下列方式使Resharper格式化行包装的三元运算符

我真的希望Resharper以这种方式格式化我的线条三元组 return navigator.IsTerminating ? navigator.Context : navigator.Context.GetSimulatableRelative(new Navigator(navigator)); 有人能帮忙吗?

为什么我不能在C#三元表达式中使用break?

我试图将if else子句转换为while循环中的三元组,但是它不允许我在问号后面有一个中断,将中断处的错误指向为无效表达式。 我怎么会把这个简单的东西变成这样的三元组。 while (true) { Console.WriteLine(“Enter 3 words seperated by spaces: “); var input = Console.ReadLine(); //input == “” ? break : ConvertToPascal(input); if (input == “”) break; else ConvertToPascal(input); } }

完整的if / else语句与条件运算符

可能重复: 使用条件?:(三元)运算符的好处 条件运算符是否缓慢? 大家好, 关于if / else语句的不同,我有一个非常简单的问题。 除了编写更少的代码之外,使用条件运算符而不是完整的if / else语句还有其他好处吗? 是否有性能提升,编译代码减少,或者在使用时有什么好处? 感谢您的帮助 马尔科

C#中的三元运算符关联性 – 我可以依赖它吗?

啊,你不喜欢一个好的三元滥用吗? :)考虑以下表达式: true ? true : true ? false : false 对于那些现在完全感到困惑的人,我可以告诉你,这个评估是真的 。 换句话说,它相当于: true ? true : (true ? false : false) 但这可靠吗? 我能否确定在某些情况下不会出现这种情况: (true ? true : true) ? false : false 有些人可能会说 – 好吧,只需添加括号或完全不使用它 – 毕竟,众所周知,三元运算符是邪恶的! 当然它们是,但在某些情况下它们确实有意义。 对于好奇的 – 我正在拧干通过一系列属性比较两个对象的代码。 如果我像这样冷写它会很好: obj1.Prop1 != obj2.Prop1 ? obj1.Prop1.CompareTo(obj2.Prop1) : obj1.Prop2 != obj2.Prop2 ? obj1.Prop2.CompareTo(obj2.Prop2) […]

用三元运算符理解C#编译错误

我已经从Wrox Professional ASP.NET 4.0 MVC 4书籍,第179页(“了解Web应用程序中的安全性向量”一章)中复制了以下代码,只需稍加修改即可将其protected并作为实用方法存储在我的抽象应用程序中 -宽Controller protected ActionResult RedirectToLocal(string returnUrl) { if (Url.IsLocalUrl(returnUrl)) { return Redirect(returnUrl); } else { return RedirectToAction(“Index”, “Home”); } } 上面的代码旨在保护MVC应用程序免受开放重定向攻击,这些攻击不是问题的主题。 代码显然是格式良好,编译,我相信它的工作原理。 当“巧妙地”将上面的代码更改为以下单行时,就会出现问题 return (Url.IsLocalUrl(returnUrl)) ? Redirect(returnUrl) : RedirectToAction(“Index”, “Home”); 上面的单行应该与扩展代码完全相同(不,ReSharper不建议我替换,这是我的主动)。 编译错误如下: there is no implicit conversion between System.Web.Mvc.RedirectResult and System.Web.Mvc.RedirectToRouteResult 。 然后ReSharper来帮助并建议以下修改 return (Url.IsLocalUrl(returnUrl)) ? (ActionResult) Redirect(returnUrl) : RedirectToAction(“Index”, […]

C#中的三元运算符

使用三元运算符,可以执行以下操作(假设Func1()和Func2()返回int: int x = (x == y) ? Func1() : Func2(); 但是,有没有办法做同样的事情,而不返回一个值? 例如,类似(假设Func1()和Func2()返回void): (x == y) ? Func1() : Func2(); 我意识到这可以使用if语句来完成,我只是想知道是否有办法像这样做。

三元运算符VB vs C#:为什么解决Nothing为零?

我只是在脚下射击,想知道是否有实际的理由让这种情况成为可能。 无论如何,这个问题可以留在未来的脚射手的方便。 假设我们在vb.net中有一个可以为null的值: Dim i as Integer? 我们希望根据条件为其分配值,并使用三元运算符,因为它非常简洁和东西: i = If(condition(), Nothing, 42) 也就是说,如果条件为true ,则使用可空性,否则使用该值。 射击发生的时间点。 由于没有明显的原因,VB编译器决定Nothing和Integer的公共基类型是Integer ,此时它会以静默方式将语句转换为: i = If(condition(), 0, 42) 现在,如果您要在C#中执行此操作: i = (condition()) ? null : 42; 您会立即收到编译器错误,指出与int不能很好地混合。 这很棒,因为这次我采用了C#方式,我的脚会更健康。 为了编译,你必须明确地写: i = (condition()) ? null : (int?)42; 现在,您可以在VB中执行相同操作并获得正确的null-ness: i = If(condition(), Nothing, CType(42, Integer?)) 但这需要首先拍摄你的脚。 没有编译器错误,也没有警告。 那就是Explicit On和Strict On 。 所以我的问题是,为什么? […]

在C#中使用条件运算符键入结果

我试图使用条件运算符,但我对它认为结果应该是的类型挂了。 下面是一个我设法表明我遇到的问题的例子: class Program { public static void OutputDateTime(DateTime? datetime) { Console.WriteLine(datetime); } public static bool IsDateTimeHappy(DateTime datetime) { if (DateTime.Compare(datetime, DateTime.Parse(“1/1”)) == 0) return true; return false; } static void Main(string[] args) { DateTime myDateTime = DateTime.Now; OutputDateTime(IsDateTimeHappy(myDateTime) ? null : myDateTime); Console.ReadLine(); ^ } | } | // This line has the compile […]