Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将三元条件运算符更改为常规if-else语句_C#_.net_Sitefinity - Fatal编程技术网

C# 将三元条件运算符更改为常规if-else语句

C# 将三元条件运算符更改为常规if-else语句,c#,.net,sitefinity,C#,.net,Sitefinity,我有一个逻辑来检查事件的开始和结束日期。如果开始日期和结束日期在同一个月内,则只显示一个日期,例如2021年2月18日。但如果是多日活动,则会显示如下活动日期,例如2021年2月18日至3月24日 这个逻辑由一个三元条件处理,工作正常,但是现在我想添加第三个条件,当事件是多天的,开始和结束日期在同一个月时。对于第三个条件,我想在开始日期中省略月份名称,只在结束日期后显示一次月份,如下所示:2021年2月18日-22日,而不是2021年2月18日-22日 这是我的三元条件,我正在考虑将其更改为标准

我有一个逻辑来检查事件的开始和结束日期。如果开始日期和结束日期在同一个月内,则只显示一个日期,例如2021年2月18日。但如果是多日活动,则会显示如下活动日期,例如2021年2月18日至3月24日

这个逻辑由一个三元条件处理,工作正常,但是现在我想添加第三个条件,当事件是多天的,开始和结束日期在同一个月时。对于第三个条件,我想在开始日期中省略月份名称,只在结束日期后显示一次月份,如下所示:2021年2月18日-22日,而不是2021年2月18日-22日

这是我的三元条件,我正在考虑将其更改为标准的if-else语句,以获得更大的灵活性,但我不确定如何更改,第三个条件的逻辑是什么:

<%# (String.Format("{0:dd MMM}", (DateTime)Eval("EventStart")) == String.Format("{0:dd MMM}", (DateTime)Eval("EventEnd"))) ? String.Format("{0:dd MMM, yyy}", ((DateTime)Eval("EventEnd")).AddMinutes((double)Eval("EventEndUtcOffset"))) : String.Format("{0:dd MMM}", ((DateTime)Eval("EventStart")).AddMinutes((double)Eval("EventStartUtcOffset")))+" - "+String.Format("{0:dd MMM, yyy}",((DateTime)Eval("EventEnd")).AddMinutes((double)Eval("EventEndUtcOffset"))) %>


如果您能帮助我理解这段代码现在的逻辑,我将不胜感激,这将帮助我理解如何将其更改为if-else语句。

因此,让我们先添加一些空格,将其格式化为三元:

(String.Format("{0:dd MMM}", (DateTime)Eval("EventStart")) == String.Format("{0:dd MMM}", (DateTime)Eval("EventEnd")))
    ? String.Format("{0:dd MMM, yyy}", ((DateTime)Eval("EventEnd")).AddMinutes((double)Eval("EventEndUtcOffset")))
    : String.Format("{0:dd MMM}", ((DateTime)Eval("EventStart")).AddMinutes((double)Eval("EventStartUtcOffset")))+" - "+String.Format("{0:dd MMM, yyy}",((DateTime)Eval("EventEnd")).AddMinutes((double)Eval("EventEndUtcOffset")))
这很容易直接转换为if/else:

string result;
if (String.Format("{0:dd MMM}", (DateTime)Eval("EventStart")) == String.Format("{0:dd MMM}", (DateTime)Eval("EventEnd")))
{
    result = String.Format("{0:dd MMM, yyy}", ((DateTime)Eval("EventEnd")).AddMinutes((double)Eval("EventEndUtcOffset")));
}
else
{
    result = String.Format("{0:dd MMM}", ((DateTime)Eval("EventStart")).AddMinutes((double)Eval("EventStartUtcOffset")))+" - "+String.Format("{0:dd MMM, yyy}",((DateTime)Eval("EventEnd")).AddMinutes((double)Eval("EventEndUtcOffset")));
}
然而,这并没有特别提高可读性。。。让我们稍微改进一下。 首先声明一些变量以避免所有这些重复强制转换:

var eventStart = (DateTime)Eval("EventStart");
var eventEnd = (DateTime)Eval("EventEnd");
double eventEndUtcOffsetMins = (double)Eval("EventEndUtcOffset");
string result;
if (String.Format("{0:dd MMM}", eventStart) == String.Format("{0:dd MMM}", eventEnd))
{
    result = String.Format("{0:dd MMM, yyy}", eventEnd.AddMinutes(eventEndUtcOffsetMins));
}
else
{
    double eventStartUtcOffsetMins = (double)Eval("EventStartUtcOffset");
    result = String.Format("{0:dd MMM}", eventStart.AddMinutes(eventStartUtcOffsetMins))+" - "+String.Format("{0:dd MMM, yyy}",eventEnd.AddMinutes(eventEndUtcOffsetMins));
}
情况正在好转。我们可以通过对这些偏移量使用
timespan
来缩短它:这将复杂性从那些已经很长的
String.Format
行转移到declate
eventstartutcofset
eventEndUtcOffset

var eventStart = (DateTime)Eval("EventStart");
var eventEnd = (DateTime)Eval("EventEnd");
var eventEndUtcOffset = TimeSpan.FromMinutes((double)Eval("EventEndUtcOffset"));
string result;
if (String.Format("{0:dd MMM}", eventStart) == String.Format("{0:dd MMM}", eventEnd))
{
    result = String.Format("{0:dd MMM, yyy}", eventEnd + eventEndUtcOffset);
}
else
{
    var eventStartUtcOffset = TimeSpan.FromMinutes((double)Eval("EventStartUtcOffset"));
    result = String.Format("{0:dd MMM}", eventStart + eventStartUtcOffset)+" - "+String.Format("{0:dd MMM, yyy}",eventEnd + eventEndUtcOffset);
}
我们还可以删除对
String.Format
的调用,并改用插值字符串:

var eventStart = (DateTime)Eval("EventStart");
var eventEnd = (DateTime)Eval("EventEnd");
var eventEndUtcOffset = TimeSpan.FromMinutes((double)Eval("EventEndUtcOffset"));

string result;
if ($"{eventStart:dd MMM}" == $"{eventEnd:dd MMM}")
{
    result = $"{eventEnd + eventEndUtcOffset:dd MMM, yyy}";
}
else
{
    var eventStartUtcOffset = TimeSpan.FromMinutes((double)Eval("EventStartUtcOffset"));
    result = $"{eventStart + eventStartUtfOffset:dd MMM} - {eventEnd + eventEndUtfOffset:dd MMM, yyy}";
}
这稍微好一点——至少我们现在可以看到代码在做什么。

试试这段代码-

var startDate = new DateTime(2020, 12, 12);
var endDate = new DateTime(2020, 02, 18);

var resDate=GetDateBreak(startDate, endDate);
Console.WriteLine(resDate);

public static string GetDateBreak(DateTime sDate, DateTime eDate)
    {
        CultureInfo info = new CultureInfo("en-us");
        return (sDate.Month == eDate.Month) ? $"Date={sDate.Day}-{eDate.Day} {info.DateTimeFormat.GetAbbreviatedMonthName(eDate.Month)},{eDate.Year}" 
            : $"Date={sDate.Day} {info.DateTimeFormat.GetAbbreviatedMonthName(sDate.Month)}-{eDate.Day} {info.DateTimeFormat.GetAbbreviatedMonthName(eDate.Month)},{eDate.Year}";
    }

所以你的问题是如何准确地写一个否定。我知道如何编写if语句,但我无法理解三元代码中的逻辑。我想知道是否有可能在同一个代码中添加第三个条件,如果没有,那么如何解析并将其更改为if语句我可能会尝试将所有逻辑移出
,因为它是相当不可读的。整理代码会让你更容易看到正在发生的事情。这就是我试图理解的,这挽救了我的一天。解释的第一部分对我帮助很大,你清理它的方式更有意义。谢谢!:)