如何将 csharp 8 代码转换为早期版本
how to convert csharp 8 code to earlier version
我需要更改此代码以在早期版本的 c# 上工作
在下面的代码中如何改变这样的条件
if (value is TimeSpan ts)
更早的 c# ?
string parsedValue;
bool parsed;
if (value == DateTime d && d >= BaseDate)
{
parsedValue = d.ToOADate().ToInvariantString();
parsed = true;
SetDateTimeFormat(style, d.Date == d);
}
else if (value is TimeSpan ts)
{
parsedValue = ts.TotalDays.ToInvariantString();
parsed = true;
SetTimeSpanFormat(style);
}
else if (value is Boolean b)
{
parsedValue = b ? "1" : "0";
_dataType = XLDataType.Boolean;
parsed = true;
}
同样在下面的代码中
private static Boolean TryGetBasicValue<T, U>(String currentValue, ParseFunction<U> parseFunction, out T value)
{
if (parseFunction.Invoke(currentValue, NumberStyles.Any, null, out U result))
{
value = (T)Convert.ChangeType(result, typeof(T).GetUnderlyingType());
return true;
}
value = default;
return false;
}
如何更改 C# 7
value = default;
到早期的 C# 代码?
C# 7: is operator pattern or Is-expression with pattern
if (value is TimeSpan ts)
C# 3: is and as 运算符
TimeSpan? ts = value as TimeSpan?;
if (ts.HasValue)
...
或
if (value is TimeSpan)
TimeSpan ts = (TimeSpan)value;
C# 7:默认文字
value = default;
C# 3: 默认运算符
value = default(T);
表达式 value is TimeSpan ts
检查 value
的运行时类型,如果其类型为 TimeSpan
,则将该值复制到 ts
变量中。装箱的值类型将在复制过程中取消装箱。
请注意,System.TimeSpan
可能是您在此处处理的类型,它是一种值类型,因此 不 与 as
兼容return 引用类型所必需的运算符(以便在类型不正确时它可以 return null
)。
因此在您的示例中,您需要检查类型然后显式地拆箱值,如下所示:
...
else if (value is TimeSpan)
{
TimeSpan ts = (TimeSpan)value;
parsedValue = ts.TotalDays.ToInvariantString();
parsed = true;
SetTimeSpanFormat(style);
}
...
第二个更简单,因为 default
可以用 default(T)
代替。例如。 value = default(T);
.
我需要更改此代码以在早期版本的 c# 上工作 在下面的代码中如何改变这样的条件
if (value is TimeSpan ts)
更早的 c# ?
string parsedValue;
bool parsed;
if (value == DateTime d && d >= BaseDate)
{
parsedValue = d.ToOADate().ToInvariantString();
parsed = true;
SetDateTimeFormat(style, d.Date == d);
}
else if (value is TimeSpan ts)
{
parsedValue = ts.TotalDays.ToInvariantString();
parsed = true;
SetTimeSpanFormat(style);
}
else if (value is Boolean b)
{
parsedValue = b ? "1" : "0";
_dataType = XLDataType.Boolean;
parsed = true;
}
同样在下面的代码中
private static Boolean TryGetBasicValue<T, U>(String currentValue, ParseFunction<U> parseFunction, out T value)
{
if (parseFunction.Invoke(currentValue, NumberStyles.Any, null, out U result))
{
value = (T)Convert.ChangeType(result, typeof(T).GetUnderlyingType());
return true;
}
value = default;
return false;
}
如何更改 C# 7
value = default;
到早期的 C# 代码?
C# 7: is operator pattern or Is-expression with pattern
if (value is TimeSpan ts)
C# 3: is and as 运算符
TimeSpan? ts = value as TimeSpan?;
if (ts.HasValue)
...
或
if (value is TimeSpan)
TimeSpan ts = (TimeSpan)value;
C# 7:默认文字
value = default;
C# 3: 默认运算符
value = default(T);
表达式 value is TimeSpan ts
检查 value
的运行时类型,如果其类型为 TimeSpan
,则将该值复制到 ts
变量中。装箱的值类型将在复制过程中取消装箱。
请注意,System.TimeSpan
可能是您在此处处理的类型,它是一种值类型,因此 不 与 as
兼容return 引用类型所必需的运算符(以便在类型不正确时它可以 return null
)。
因此在您的示例中,您需要检查类型然后显式地拆箱值,如下所示:
...
else if (value is TimeSpan)
{
TimeSpan ts = (TimeSpan)value;
parsedValue = ts.TotalDays.ToInvariantString();
parsed = true;
SetTimeSpanFormat(style);
}
...
第二个更简单,因为 default
可以用 default(T)
代替。例如。 value = default(T);
.