【问题标题】:default parameter specifiers are not permitted error in c# 2.0 [duplicate]c#2.0中不允许默认参数说明符错误[重复]
【发布时间】:2013-07-10 17:51:34
【问题描述】:

我在我的程序的以下代码块中收到此错误。我正在将 c# 与 .net 2.0 一起使用。它在代码的第一行中以 decimals =2 显示此错误。请帮忙

 private string formatSizeBinary(Int64 size, Int32 decimals = 2)
    {
        string[] sizes = { "Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
        double formattedSize = size;
        Int32 sizeIndex = 0;
        while (formattedSize >= 1024 & sizeIndex < sizes.Length)
        {
            formattedSize /= 1024;
            sizeIndex += 1;
        }
        return string.Format("{0} {1}", Math.Round(formattedSize, decimals).ToString(), sizes[sizeIndex]);
    }

【问题讨论】:

  • Int32 decimals = 2 - .NET 2.0 中是否允许使用默认参数说明符?我认为它们是在以后的某个时候才被介绍的。
  • 您的意思是您需要帮助理解问题,还是您的意思是当您无法使用默认参数时,您如何执行与默认参数等效的操作?

标签: c# c#-2.0


【解决方案1】:

默认参数在 .Net 2 中不可用。

它们仅在 .Net 4.0 中可用:

http://msdn.microsoft.com/en-us/library/dd264739.aspx

【讨论】:

  • 具体来说,默认参数是在C# 4中引入的。
  • 请注意 .NET 和 C# 之间的区别。您可以在 .NET 4.5 和 .NET 4.0 上使用一些 C# 5 功能。我不记得 C# 4 是否支持针对 .NET 2.0。
【解决方案2】:

如果您想要此功能,则必须恢复为重载方法,因为在 C# 2.0 中“不允许使用默认参数说明符”。

private string formatSizeBinary(Int64 size)
{
    return formatSizeBinary(size, 2);
}

private string formatSizeBinary(Int64 size, Int32 decimals)
{
    string[] sizes = { "Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
    double formattedSize = size;
    Int32 sizeIndex = 0;
    while (formattedSize >= 1024 & sizeIndex < sizes.Length)
    {
        formattedSize /= 1024;
        sizeIndex += 1;
    }
    return string.Format("{0} {1}", Math.Round(formattedSize, decimals).ToString(), sizes[sizeIndex]);
}

【讨论】:

  • 感谢朋友,这段代码完美运行,你真是个天才......
【解决方案3】:

C# 4.0 中引入了更具体的默认参数。但是您可以在.Net framework 2.0 中使用它们,只要您在VS2010 中构建您的解决方案。来自here的答案-

自 1.0 起,CLR 已支持默认参数。语言 就像 VB.Net 从一开始就一直在使用它们。虽然第一个 支持它们的 C# 版本是 4.0,它仍然可以生成有效代码 对于 2.0 CLR,实际上确实如此。因此您可以使用默认值 如果您的目标是 3.5 CLR(或 2.0、3.0 等),请使用 2010 年的参数 ...)

这种类型的支持不限于默认参数。许多新的 C# 功能可以在旧版本的框架上使用,因为它们确实 不依赖 CLR 更改。这里还有一些支持 CLR 2.0 及以上版本

命名参数:添加了 C# 4.0

Lambda 表达式:添加了 C# 3.0

自动属性:添加了 C# 3.0

扩展方法:添加了 C# 3.0

Co/ContraVariance:添加了 C# 4.0

【讨论】:

    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 2011-12-10
    • 2011-09-17
    • 1970-01-01
    • 2014-12-10
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多