我想在 c# 中使用三元运算符检查传递的值是空值还是日期时间值?
我试过这样
fromDate == null ? null : Convert.ToDateTime(fromDate)
收到错误:
type of conditional expression cannot be determined
我想检查变量是否fromDate
为空或具有日期时间值?
变量 fromDate 来自 Querystring 和字符串类型。
我想在 c# 中使用三元运算符检查传递的值是空值还是日期时间值?
我试过这样
fromDate == null ? null : Convert.ToDateTime(fromDate)
收到错误:
type of conditional expression cannot be determined
我想检查变量是否fromDate
为空或具有日期时间值?
变量 fromDate 来自 Querystring 和字符串类型。
来自?: Operator
:
first_expression 和 second_expression 的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。
condition ? first_expression : second_expression;
Convert.ToDateTime
返回并且和之间DateTime
没有隐式转换。条件运算符是一个表达式,需要返回类型。null
DateTime
一个选项对我来说似乎是合乎逻辑的,使用DateTime.TryParse
(返回boolean
)作为第一个表达式并使用另一个布尔值(true
或false
)作为第二个表达式。Damiths 的回答似乎合乎逻辑。
或者,您可以使用可为空的 DateTime ,例如DateTime?
DateTime? foo;
if(foo.HasValue)
{
//Nullable DateTime has a value..
}
fromDate
如果你有如下的字符串值
DateTime dt;
bool isValidDate = String.IsNullOrEmpty(fromDate) ? false : DateTime.TryParse(fromDate, out dt);
如果您知道您输入的日期时间格式/格式,您可以更好地使用DateTime.TryParseExact
方法
如果fromDate是DateTime,那么简单你可以检查如下
fromDate.HasValue
你不需要?: Operator
问题是 Convert.ToDateTime(fromDate) 是 DateTime 类型,它不能接受空值,这就是为什么这段代码不能以这种形式工作的原因。你有两个选择要做。如果出现以下情况,请将其更改为常规:
if(fromDate != null)
{
Convert.ToDateTime(fromDate)
}
或将 DateTime 转换为可为空的 DateTime:
fromDate == null ? null : (DateTime?)Convert.ToDateTime(fromDate)
C# 中的三元运算符需要两个值的类型相同,此处对此进行了说明。
romDate == null ? null : Convert.ToDateTime(fromDate)
null
并且Convert.ToDateTime(fromDate)
没有普通类型。编译器必须能够将条件运算符中的两个表达式转换为相同的类型。
您必须使用 String.IsNullOrEmpty 来检查 fromDate 是否为 null,如下所示:
DateTime? date = String.IsNullOrEmpty(fromDte) ? null : (DateTime?)Convert.ToDateTime(fromDate)
我希望它会帮助你
string format = "ddd dd MMM h:mm tt yyyy";
DateTime dateTime;
fromDate=(DateTime.TryParseExact(fromDate, format, CultureInfo.InvariantCulture,
DateTimeStyles.None, out dateTime))?dateTime:null;
看起来主要问题是您正在尝试分配null
给DateTime
DateTime 是一个结构而不是引用类型,因此无法做到这一点。
使用可为空的 DateTime ( DateTime?
) 或特定值来指示空,例如DateTime.MinValue
看看这里的例子: http: //www.dotnetperls.com/nullable-datetime