首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中未考虑的默认值参数

C#中未考虑的默认值参数
EN

Stack Overflow用户
提问于 2021-04-27 10:32:17
回答 1查看 287关注 0票数 0

我已经下载了QRCoder源代码,并使用VisualStudio2019编译了这些源代码。然后,我在Visual 2008项目上添加一个引用到从文件夹“QRCODER.dll”生成的net35。

然后我试着开始一个小小的演示:

代码语言:javascript
复制
QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode("The text which should be encoded.",         
QRCodeGenerator.ECCLevel.Q);
QRCode qrCode = new QRCode(qrCodeData);

编译器会给出一个错误,说明没有找到方法匹配(我只传递一个字符串和一个错误级别)。在源代码中,我看到带有默认值的方法签名:

代码语言:javascript
复制
public QRCodeData CreateQrCode(string plainText, ECCLevel eccLevel, bool forceUtf8 = false, bool utf8BOM = false, EciMode eciMode = EciMode.Default, int requestedVersion = -1)
{
    return GenerateQrCode(plainText, eccLevel, forceUtf8, utf8BOM, eciMode, requestedVersion);
}

所以问题是:为什么我不能用两个参数(字符串和错误级别)调用这个方法?

我的解决方案是显式地添加一个带有两个参数的方法(在源文件中),并从这个方法的主体中调用带有默认值的方法。之后,我在Visual 2008中编译并引用了我的项目中的dll,现在编译器不再给出错误.在方法中是否支持theframework.net 3.5默认值.还是.?

代码语言:javascript
复制
  /// <summary>
        /// Calculates the QR code data which than can be used in one of the rendering classes to generate a graphical representation.
        /// </summary>
        /// <param name="plainText">The payload which shall be encoded in the QR code</param>
        /// <param name="eccLevel">The level of error correction data</param>
        /// <param name="forceUtf8">Shall the generator be forced to work in UTF-8 mode?</param>
        /// <param name="utf8BOM">Should the byte-order-mark be used?</param>
        /// <param name="eciMode">Which ECI mode shall be used?</param>
        /// <param name="requestedVersion">Set fixed QR code target version.</param>
        /// <exception cref="QRCoder.Exceptions.DataTooLongException">Thrown when the payload is too big to be encoded in a QR code.</exception>
        /// <returns>Returns the raw QR code data which can be used for rendering.</returns>
        public QRCodeData CreateQrCode(string plainText, ECCLevel eccLevel, bool forceUtf8 = false, bool utf8BOM = false, EciMode eciMode = EciMode.Default, int requestedVersion = -1)
        {
            return GenerateQrCode(plainText, eccLevel, forceUtf8, utf8BOM, eciMode, requestedVersion);
        }

        public QRCodeData CreateQrCode(string plainText, ECCLevel eccLevel)
        {
            return GenerateQrCode(plainText, eccLevel);
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-27 10:40:51

确实支持方法中的framework.net 3.5默认值

.NET框架支持3.5版中的可选参数(根据作为框架一部分的属性),但C# 3编译器( Visual 2008使用的编译器)不支持。可选参数和命名参数是在C# 4中引入的。

我强烈建议使用现代版本的Visual,即使您仍然需要针对.NET的旧版本(如果可能的话,我也强烈建议移除不受支持的.NET版本)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67281341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档